Source code: schiffeversenken/Spiel.java
1 package schiffeversenken;
2
3 /*
4 JavaBattle
5 ==========
6
7 published under GNU General Public License (GPL)
8
9 schoetz@users.sourceforge.net
10
11 */
12
13 /*
14 Spiel
15 =====
16
17 Diese Klasse erstellt und managet ein Spiel. Sie gibt den Spielern aufträge wie z.B. schiffesetzten.
18
19 Konstruktoren: public Spiel(int groesse, Callback c) :
20 erzeugt ein Spiel Mensch gegen Computer
21 public Spiel(int groesse, int port, Callback c)
22 erzeugt ein Spiel Mensch gegen anderen PC als Server (über Socketverbindung)
23 public Spiel(int groesse, int port, String ip, Callback c)
24 erzeugt ein Spiel Mensch gegen anderen PC als Client (über Socketverbindung)
25 */
26
27 import schiffeversenken.spieler.*;
28
29 public class Spiel extends Thread{
30
31 int shipArray[];
32 int groesse;
33 Spieler[] spieler;
34 int winner = 0;
35 int fertig;
36
37 /*
38
39 funktioniert nicht: Random Fehler
40
41 public Spiel(int groesse) {
42 this.groesse = groesse;
43 countShips();
44 spieler = new Spieler[2];
45 Spielfeld sp1 = new Spielfeld(groesse,groesse);
46 Spielfeld sp2 = new Spielfeld(groesse,groesse);
47 spieler[0] = new Computer(sp1,sp2,groesse,shipArray);
48 spieler[1] = new Computer(sp2,sp1,groesse,shipArray);
49 }*/
50
51 public Spiel(int groesse, Callback c){
52 this.groesse = groesse;
53 shipArray = new int[4];
54 countShips();
55 spieler = new Spieler[2];
56 Spielfeld sp1 = new Spielfeld(groesse,groesse);
57 Spielfeld sp2 = new Spielfeld(groesse,groesse);
58 spieler[0] = new Mensch(sp1,sp2,c,null);
59 spieler[1] = new Computer(sp2,sp1,groesse,shipArray);
60 start();
61 }
62 /* public Spiel(int groesse, int port, Callback c){
63 konstruktor(groesse, port, "", c);
64 }
65 public Spiel(int groesse, int port, String ip, Callback c){
66 konstruktor(groesse, port, ip, c);
67 }
68
69 private void konstruktor(int groesse, int port, String ip, Callback c) {
70 shipArray = new int[4];
71 this.groesse = groesse;
72 countShips();
73 start();
74 }*/
75
76 public void countShips()
77 {
78 int ship2=2, ship3=1, ship4=1, ship8=0;
79 for(int i =1;i<=groesse-5;i++){
80 if(i%2==0) {
81 if(ship2==2){ship2=1;}
82 else{ship2=2;}
83 ship3=1;
84 ship4++;
85 }
86 else{ship3=2;}
87 if((i-2)%4==0) {
88 ship8++;
89 }
90 }
91 shipArray[0] = ship2;
92 shipArray[1] = ship3;
93 shipArray[2] = ship4;
94 shipArray[3] = ship8;
95 }
96
97 public int[] getShipArray(){
98 int[] ship = new int[4];
99 ship[0] = shipArray[0];
100 ship[1] = shipArray[1];
101 ship[2] = shipArray[2];
102 ship[3] = shipArray[3];
103 return ship;
104 }
105
106 //public Spielfeld getSpielfeld(int spieler){}
107
108 //public int anzahlSchuss(int spieler){}
109
110 //public int anzahlTreffer(int spieler){}
111
112 //public int schuss(int x, int y){}
113
114 public boolean setzenFertig() {
115 fertig--;
116
117 if(fertig == 0)
118 return true;
119 else
120 return false;
121 }
122
123 public void run(){
124 SetzenThread st1 = new SetzenThread(spieler[0], this);
125 SetzenThread st2 = new SetzenThread(spieler[1], this);
126 fertig = 2;
127 synchronized(this) {
128 try {
129 this.wait();
130 }
131 catch(Exception e) {
132 System.out.println("Nicht handhabbare Exception.\nDas Programm wird beendet");
133 System.exit(-1);
134 }
135 }
136 while(true) {
137 spieler[0].schiessen();
138 if(spieler[0].dead()){
139 winner = 2;
140 break;
141 }
142 spieler[1].schiessen();
143 if(spieler[1].dead()){
144 winner = 1;
145 break;
146 }
147 }
148 if(winner == 1) {
149 spieler[0].spielBeendet(true);
150 spieler[1].spielBeendet(false);
151 }
152 else {
153 spieler[0].spielBeendet(false);
154 spieler[1].spielBeendet(true);
155 }
156 }
157
158 public void chatSend(String str){}
159
160 }