witam, musze zrobic diagram klas, ale mam kod zapisany w trzech plikach i nie bardzo wiem jak mam te klasy polaczyc ze sobą. Czy dla kazdego pliku zrobic osobno, no ae to jest midlet i one sa powiazane...............? Jesli ktos chcialby mi Pomoc udostepnie kod. DZIĘKI DLA CHCĄCYCH POMÓC
Udostępnij tutaj. Jak masz rozpisany kod w trzech plikach? 3 klasy w 3 plikach czy co? Jeśli są powiązane to na pewno będzie można połączyć jakimiś asocjacjami, a jak nie to się coś wymyśli :-)
te pliki sa pwiazane, tylko nigdy nie robilam diagramu klas rozraczonego na 3 pliki. Jak mozesz to rozrysuj jak TY to widzisz. OTO PIERWSZY PLIK
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Display;
public class Pilkarz {
short[][] boisko = new short[15][9]; //tablica odzwierciedlajaca boisko
boolean czyTrwaGra; //zmienna do przechowywania informacji, czy gra jeszcze trwa (true), czy sie skonczyla (false)
boolean czyGracz1; //zmienna przechowujaca informacje o tym, który gracz jest przy pilce true - gracz pierwszy, false - gracz drugi
boolean wygralGracz1; //zmienna zapamietujaca, który gracz wyral, true - racz pierwszy, false -gracz drugi
String wiadomosc = null; //komunikat do wyswietlenia na ekranie
String wiadomosc2 = null; //komunikat do wyswietlenia na ekranie
short temp; //zmienna pomocnicza
short pozycjaPilkiDlugosc; //aktualne polozenie pilki
short pozycjaPilkiSzerokosc; //---
int ileCzerwony=0;
int ileZielony=0;
Ekran _e;
Pilkarz(Ekran e)
{
_e=e;
zainicjujBoisko();
}
void zainicjujBoisko() //inicjowanie boiska
{
for(int i = 0; i < 15; i++)
{
for(int j = 0; j < 9; j++)
{
boisko[i][j] = 0;
}
}
boisko[1][0]=16+32+64+128+1+2+4; //zabezpieczenie drugiej lini od góry
boisko[1][1]=64+128+1+2+4;
boisko[1][2]=64+128+1+2+4;
boisko[1][3]=64+128+1;
boisko[1][5]=1+2+4;
boisko[1][6]=64+128+1+2+4;
boisko[1][7]=64+128+1+2+4;
boisko[1][8]=64+128+1+2+4+8+16;//---
boisko[13][0]=4+8+16+32+64+128+1; //zabezpieczeni drugiej linii od dolu
boisko[13][1]=4+8+16+32+64;
boisko[13][2]=4+8+16+32+64;
boisko[13][3]=16+32+64;
boisko[13][5]=4+8+16;
boisko[13][6]=4+8+16+32+64;
boisko[13][7]=4+8+16+32+64;
boisko[13][8]=1+2+4+8+16+32+64; //---
for(int i = 2; i < 13;i++) //zabezpieczenie linii bocznych
{
boisko[i][0] = 16+32+64+128+1;
boisko[i][8] = 1+2+4+8+16;
}
for(int i = 1; i < 8; i++) //zabezpieczenie linii srodkowej
{
boisko[7][i]+= 4 + 64;
}
boisko[7][0]+=4; //miejsce gdzie linia srodkowa laczy sie z bocznymi
boisko[7][8]+=64; //---
czyTrwaGra = true;
czyGracz1 = true;
wiadomosc = null;
pozycjaPilkiDlugosc = 7;
pozycjaPilkiSzerokosc = 4;
}
void zresetujBoisko()
{
zainicjujBoisko();
}
boolean czyKoniecGry()
{
if(boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc]==255) // gracz nie ma mozliwosc ruchu - wartosc rozy 255
{
if(czyGracz1)
{
wygralGracz1 = false;
}
else
{
wygralGracz1 = true;
}
czyTrwaGra = false;
return true;
}
if( boisko[0][3] + boisko[0][4] + boisko[0][5] > 0 ) //bramke strzelil gracz czerwony
{
wygralGracz1 = false;
czyTrwaGra = false;
return true;
}
if( boisko[14][3] + boisko[14][4] + boisko[14][5] > 0 ) //bramke strzelil gracz zielony
{
wygralGracz1 = true;
czyTrwaGra = false;
return true;
}
return false;
}
void koniecGry()
{
if(wygralGracz1)
{
wiadomosc = "Wygral gracz zielony";
wiadomosc2= "Wygrałeś wykonując ruchów: "+ileZielony+", \ntwój przeciwnik wykonał ruchów:"+ileCzerwony+".\nGRATULACJE !!!";
}
else
{
wiadomosc = "Wygral gracz czerwony";
wiadomosc2= "Wygrałeś wykonując ruchów: "+ileZielony+", \ntwój przeciwnik wykonał ruchów:"+ileCzerwony+".\nGRATULACJE !!!";
}
}
void atakujBramkeZielonego() {
short[] kolejnosc1 = new short[]{1,2,128,4,64,8,32,64};
short[] kolejnosc2 = new short[]{128,1,2,64,4,32,8,64};
short[] kolejnosc3 = new short[]{2,1,128,4,64,8,32,64};
if(pozycjaPilkiSzerokosc > 4){
kolejnosc1 = kolejnosc2;
}
if(pozycjaPilkiSzerokosc < 4){
kolejnosc1 = kolejnosc3;
}
for(short i=0; i < 8; i++){
if((boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] & kolejnosc1[i]) == 0){
zrobRuch(kolejnosc1[i]);
return;
}
}
}
void zrobRuch(short kierunek)
{
if(czyTrwaGra)
{
if((boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] & kierunek) > 0) //sprawdzenie czy ruch w danym kierunku nie byl juz wykonany
{
}
else
{
if (czyGracz1)
{
ileCzerwony++;
}
else
{
ileZielony++;
}
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] +=kierunek;
switch(kierunek)
{
case 1: pozycjaPilkiDlugosc --;
temp = boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc];
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] += 16;
break;
case 2: pozycjaPilkiDlugosc --;
pozycjaPilkiSzerokosc ++;
temp = boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc];
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] += 32;
break;
case 4: pozycjaPilkiSzerokosc ++;
temp = boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc];
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] += 64;
break;
case 8: pozycjaPilkiDlugosc ++;
pozycjaPilkiSzerokosc ++;
temp = boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc];
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] += 128;
break;
case 16: pozycjaPilkiDlugosc ++;
temp = boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc];
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] += 1;
break;
case 32: pozycjaPilkiDlugosc ++;
pozycjaPilkiSzerokosc --;
temp = boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc];
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] += 2;
break;
case 64: pozycjaPilkiSzerokosc --;
temp = boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc];
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] += 4;
break;
case 128: pozycjaPilkiDlugosc --;
pozycjaPilkiSzerokosc --;
temp = boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc];
boisko[pozycjaPilkiDlugosc][pozycjaPilkiSzerokosc] += 8;
break;
}
if(czyKoniecGry())
{
koniecGry();
}
if(temp == 0) //jezeli znaleziono sie w polu pustym do gry wchodzi gracz przeciwny
{
czyGracz1 = !czyGracz1;
}
int czyDwochGraczy;
czyDwochGraczy = _e.getCzyDwochGraczy();
if (!czyGracz1) // jezeli gracz czerwony gre przejmuje komputer
{
if (czyDwochGraczy==0)
{
atakujBramkeZielonego();
}
}
}
}
}
}
OTO DRUGI PLIK
//sekcja importu
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Ekran extends Canvas{
Pilkarz pilkarz = new Pilkarz(this);
//Alert alert;
static int czyDwochGraczy;
public final static int ODL=8; // zmiennka przechowujaca odleglosc punktow d siebie
public final static int KR=2; //odleglosc pomiedzy rozami
pilkarz_midlet ms;
public Ekran(pilkarz_midlet m)
{
ms = m;
}
protected void paint(Graphics arg0)
{
arg0.fillRect(0,0,this.getWidth(), this.getHeight());
rysujPunkty(arg0);
rysujLinieBoiska(arg0);
rysujRuchy(arg0);
if(pilkarz.czyGracz1)
{
arg0.setColor(-16711936);
}
else
{
arg0.setColor(-65536);
}
arg0.fillRoundRect(pilkarz.pozycjaPilkiSzerokosc*ODL-2+KR,pilkarz.pozycjaPilkiDlugosc*ODL-2+KR,4,4, 2, 2); //narysowanie pilki
if(pilkarz.wiadomosc != null)
{
arg0.setColor(-16711681);
//alert = new Alert(pilkarz.wiadomosc); // wyswietlanei komunikatu
Alert wynik = new Alert(""+pilkarz.wiadomosc+"",""+pilkarz.wiadomosc2+"", null, AlertType.CONFIRMATION );
wynik.setTimeout(Alert.FOREVER);
//display.setCurrent(wynik);
Display.getDisplay(ms).setCurrent(wynik); //----
pilkarz.wiadomosc = null;
pilkarz.wiadomosc2 = null;
}
}
private void rysujPunkty(Graphics arg0)
{
arg0.setColor(-256);
for(int i = 0; i < 9; i++)
{
for(int j = 1; j < 14; j++)
{
arg0.fillRoundRect(i*ODL+KR,j*ODL+KR,1,1, 2, 2);
}
}
}
private void rysujRuchy(Graphics arg0)
{
for(int i = 2; i < 13; i++) //rysowanie dla punktow wewnarz boika
{
for(int j = 1; j < 8; j++)
{
rysujRoze(arg0, i, j);
}
}
rysujRoze(arg0,1,4); //rysowanie wewnatrz bramek
rysujRoze(arg0,13,4); //---
if( (pilkarz.boisko[2][0] & 2) > 0) //ruchy w naroznikach boiska
{
arg0.drawLine(KR,2*ODL+KR,1*ODL+KR,71*ODL+KR);
}
if( (pilkarz.boisko[12][0] & 8) > 0)
{
arg0.drawLine(KR,312*ODL+KR,ODL+KR,13*ODL+KR);
}
if( (pilkarz.boisko[12][8] & 32) > 0)
{
arg0.drawLine(8*ODL+KR,12*ODL+KR,7*ODL+KR,13*ODL+KR);
}
if( (pilkarz.boisko[2][8] & 128) > 0)
{
arg0.drawLine(8*ODL+KR,2*ODL+KR,7*ODL+KR,ODL+KR);
} //---
}
private void rysujRoze(Graphics arg0, int i, int j)
{
if( (pilkarz.boisko[i][j] & 1) > 0){
arg0.drawLine(j*ODL+KR,i*ODL+KR,j*ODL+KR,(i-1)*ODL+KR);
}
if( (pilkarz.boisko[i][j] & 2) > 0){
arg0.drawLine(j*ODL+KR,i*ODL+KR,(j+1)*ODL+KR,(i-1)*ODL+KR);
}
if( (pilkarz.boisko[i][j] & 4) > 0){
arg0.drawLine(j*ODL+KR,i*ODL+KR,(j+1)*ODL+KR,i*ODL+KR);
}
if( (pilkarz.boisko[i][j] & 8) > 0){
arg0.drawLine(j*ODL+KR,i*ODL+KR,(j+1)*ODL+KR,(i+1)*ODL+KR);
}
if( (pilkarz.boisko[i][j] & 16) > 0){
arg0.drawLine(j*ODL+KR,i*ODL+KR,j*ODL+KR,(i+1)*ODL+KR);
}
if( (pilkarz.boisko[i][j] & 32) > 0){
arg0.drawLine(j*ODL+KR,i*ODL+KR,(j-1)*ODL+KR,(i+1)*ODL+KR);
}
if( (pilkarz.boisko[i][j] & 64) > 0){
arg0.drawLine(j*ODL+KR,i*ODL+KR,(j-1)*ODL+KR,i*ODL+KR);
}
if( (pilkarz.boisko[i][j] & 128) > 0){
arg0.drawLine(j*ODL+KR,i*ODL+KR,(j-1)*ODL+KR,(i-1)*ODL+KR);
}
}
private void rysujLinieBoiska(Graphics arg0)
{
arg0.setColor(-1);
arg0.drawLine(KR,ODL+KR,3*ODL+KR,ODL+KR);
arg0.setColor(-16711936);
arg0.drawLine(3*ODL+KR,ODL+KR,3*ODL+KR,KR);
arg0.drawLine(3*ODL+KR,KR,5*ODL+KR,KR);
arg0.drawLine(5*ODL+KR,ODL+KR,5*ODL+KR,KR);
arg0.drawLine(KR,7*ODL+KR,8*ODL+KR,7*ODL+KR);
arg0.setColor(-1);
arg0.drawLine(5*ODL+KR,ODL+KR,8*ODL+KR,ODL+KR);
arg0.drawLine(KR,ODL+KR,KR,13*ODL+KR);
arg0.drawLine(8*ODL+KR,ODL+KR,8*ODL+KR,13*ODL+KR);
arg0.drawLine(KR,13*ODL+KR,3*ODL+KR,13*ODL+KR);
arg0.drawLine(5*ODL+KR,13*ODL+KR,8*ODL+KR,13*ODL+KR);
arg0.setColor(-65536);
arg0.drawLine(3*ODL+KR,13*ODL+KR,3*ODL+KR,14*ODL+KR);
arg0.drawLine(3*ODL+KR,14*ODL+KR,5*ODL+KR,14*ODL+KR);
arg0.drawLine(5*ODL+KR,13*ODL+KR,5*ODL+KR,14*ODL+KR);
arg0.setColor(-1);
}
protected void keyPressed(int arg0) {
super.keyPressed(arg0);
switch(arg0){
case KEY_NUM1: pilkarz.zrobRuch((short)128);break;
case KEY_NUM2: pilkarz.zrobRuch((short)1);break;
case KEY_NUM3: pilkarz.zrobRuch((short)2);break;
case KEY_NUM4: pilkarz.zrobRuch((short)64);break;
case KEY_NUM6: pilkarz.zrobRuch((short)4);break;
case KEY_NUM7: pilkarz.zrobRuch((short)32);break;
case KEY_NUM8: pilkarz.zrobRuch((short)16);break;
case KEY_NUM9: pilkarz.zrobRuch((short)8);break;
case KEY_POUND: pilkarz.zresetujBoisko(); break;
}
repaint();
}
public int getCzyDwochGraczy() {
return ms.getCzyDwochGraczy();
}
public Display getDisplay() {
return Display.getDisplay(ms);
}
}
OTO TRZECI PLIK
import javax.microedition.lcdui.Alert;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class pilkarz_midlet extends MIDlet implements CommandListener{
private Command exitCommand = new Command("Wyjście", Command.EXIT, 2);
private Command backCommand = new Command("Wróć", Command.BACK, 1);
private Display display;
private Form info = new Form("Info");
private Form zasady = new Form("Zasady gry");
private Form jak = new Form("Jak grać");
private Ekran ekran = new Ekran(this);
private List list = new List("Pilkarzyki - midlet", List.IMPLICIT);
Alert alert2;
private int czyDwochGraczy;
public int getCzyDwochGraczy() {
return czyDwochGraczy;
}
public pilkarz_midlet()
{
display = Display.getDisplay(this);
//Definiuję wygląd listy (głównego menu)
list.setTicker(new Ticker("Wybierz jedną z opcji poniżej:"));
list.append("Rozpocznij grę z automatem", null);
list.append("Rozpocznij grę dla dwóch graczy", null);
list.append("Jak grać", null);
list.append("Zasady gry", null);
list.append("Info", null);
list.addCommand(exitCommand);
list.setCommandListener(this);
//info
info.append("Midlet ten powstał na potrzeby pracy magisterskiej: 'Gry na platformy mobilne, przegląd i implementacja' bronionej na Politechnice Wrocławskiej w 2007 roku. Autor Elżbieta Pustelnik.");
info.addCommand(backCommand);
info.setCommandListener(this);
//zasady
zasady.append("Gra polega na strzleniu bramki przeciwnkowi.\n\n Gracz może poruszać się tylko po narysowanych punktach na boisku. Ruch w danym kierunku może być wykonany tylko raz.\nJeśli gracz dojdzie do punktu w którym piłka się jeszcze nie znajdowała podczas tej rozgrywki, grę rozpoczyna gracz drugi.\nJeśli gracz dojdzie do punktu w którym odbyły się wczesniej ruchy i ma możliwość dalszego ruchu, może wykonywać ruchy dalej.\n\nNie można poruszać się po liniach boiska\n\n\n\nWygrywa ten gracz, który pierwszy zdobędzie bramkę.");
zasady.addCommand(backCommand);
zasady.setCommandListener(this);
//jak grać
jak.append("Klawisze i ich funkcje:\n- klawisz 1 - ruch po skosie góra-lewo\n- klawisz 2 - ruch do góry\n- klawisz 3 - ruch po skosie góra-prawo \n- klawisz 4 - ruch w lewo\n- klawisz 6 - ruch w prawo\n- klawisz 7 - ruch po skosie dół-lewo\n- klawisz 8 - ruch do dołu\n- klawisz 9 - ruch po skosie dół-prawo\n\n- klawisz # - Kasowanie boiska podczas gry \n\nKolor piłki mówi, który gracz ma teraz wykonać ruch.");
jak.addCommand(backCommand);
jak.setCommandListener(this);
}
public void startApp()
{
display.setCurrent(list);
}
public void pauseApp() {}
public void destroyApp(boolean unconditional) {}
public void commandAction(Command c, Displayable s) //pozwala reagowac na opcje menu
{
if (c == List.SELECT_COMMAND)
{
if (list.getString(list.getSelectedIndex()) == "Rozpocznij grę z automatem")
{
czyDwochGraczy=0;
//ekran.zmienwartosc(0);
display.setCurrent(ekran);
}
else if (list.getString(list.getSelectedIndex()) == "Rozpocznij grę dla dwóch graczy")
{
czyDwochGraczy=1;
//ekran.zmienwartosc(1);
display.setCurrent(ekran);
}
else if (list.getString(list.getSelectedIndex()) == "Jak grać")
{
display.setCurrent(jak);
}
else if (list.getString(list.getSelectedIndex()) == "Zasady gry")
{
display.setCurrent(zasady);
}
else if(list.getString(list.getSelectedIndex()) == "Info")
{
display.setCurrent(info);
}
}
else if (c == backCommand)
{
display.setCurrent(list);
}
else if (c == exitCommand)
{
destroyApp(false);
notifyDestroyed();
}
}
}
po co dajesz ciała funkcji? wystarczą same nagłówki (nie wiem jak to tam w javie jest, ale w c++ wystarczają same pliki *.h)
wiem, ale wkleilam caly kod zebys wiedzoial jak sa wykorzystywane wzajemnie
inżynieria programowania nie zajmuje się ciałem metod. Wzajemne wykorzystanie to przede wszystkim typy atrybutów ( czyli np wskaźnik na obiekt innej klasy w systemie )
Rysując diagram klas nie ma znaczenia w ilu plikach znajduje się kod źródłowy. No, może w Javie, gdzie każda klasa musi być w osobnym pliku (pomijam klasy wewnętrzne). Ale to przypadek.
Masz tutaj po prostu 3 klasy, który musisz połączyć odpowiednimi "strzałkami". Jeśli wcześniej robiłaś diagramy klas (tak jak piszesz), to nie powinnaś mieć z tym problemu.