PR1/battleship/Battleship.java

385 lines
8.2 KiB
Java

import java.util.Random;
public class Battleship{
/************************
y UND Y SIND LOGISCH VERTAUSCHT
************************/
public Battleship(){
//Spielfeld Speiler
char x = 97;
int i = 0;
int j = 0;
//Kopfzeile
for (j = 0; j < kopfzeile.length; j++){
System.out.print(kopfzeile[j] + " ");
}
System.out.print("\t\t");
for (j = 0; j < kopfzeile.length; j++){
System.out.print(kopfzeile[j] + " ");
}
System.out.println();
//Spiefeld
for (i = 0; i < spielfeld.length; i++) {
//Ausgabe 1. Spielfeld
for ( j = 0; j < spielfeld[i].length; j++) {
spielfeld[i][j] = '~';
if ((j == 0 || j == 11) && i < 10){
spielfeld[i][j] = x;
}
System.out.print(spielfeld[i][j] + " ");
}
// Computerfeld
System.out.print("\t\t");
for ( j = 0; j < cspielfeld[i].length; j++) {
cspielfeld[i][j] = '~';
// Seitenspalten
if ((j == 0 || j == 11) && i < 10){
cspielfeld[i][j] = x;
}
System.out.print(cspielfeld[i][j] + " ");
}
System.out.println();
x++;
}
//Fußzeile
for (j = 0; j < kopfzeile.length; j++){
System.out.print(kopfzeile[j] + " ");
}
System.out.print("\t\t");
for (j = 0; j < kopfzeile.length; j++){
System.out.print(kopfzeile[j] + " ");
}
System.out.println("\n");}
public enum Ship{
Speedboat(1,4),
Yacht(2,3),
Fregatte(3,2),
Kreuzer(4,1);
private final int size;
private int count;
private int lives;
Ship(int size, int count){
this.size = size;
this.lives = size;
this.count = count;
}
public void hit() {this.lives--;}
public int getCount() {return count;}
public void redCount() {this.count-- ;}
public int getSize() { return size; }
public void sink(){
if (this.lives == 0){
System.out.println("Schiff versenkt!");
}
}
}
Ship [][] ankert = new Ship[10][12];
//Zeile Spalte
char [][] spielfeld = new char [10][12];
char [][] cspielfeld = new char [10][12];
String[] kopfzeile = {" ", "1","2","3","4","5","6","7","8","9","10"," "};
public void ausgabe(){
char x = 97;
int i = 0;
int j = 0;
//Kopfzeile
for (j = 0; j < kopfzeile.length; j++){
System.out.print(kopfzeile[j] + " ");
}
System.out.print("\t\t");
for (j = 0; j < kopfzeile.length; j++){
System.out.print(kopfzeile[j] + " ");
}
System.out.println();
//Spielfeld mit Rand
//Spiefeld
for (i = 0; i < spielfeld.length; i++) {
//Ausgabe 1. Spielfeld
for ( j = 0; j < spielfeld[i].length; j++) {
//spielfeld[i][j] = '~';
if ((j == 0 || j == 11) && i < 10){
spielfeld[i][j] = x;
}
System.out.print(spielfeld[i][j] + " ");
}
//Ausgabe 2. Spiefeld
System.out.print("\t\t");
for ( j = 0; j < cspielfeld[i].length; j++) {
//cspielfeld[i][j] = '~';
// Seitenspalten
if ((j == 0 || j == 11) && i < 10){
cspielfeld[i][j] = x;
}
System.out.print(cspielfeld[i][j] + " ");
}
System.out.println();
x++;
}
//Fußzeile
for (j = 0; j < kopfzeile.length; j++){
System.out.print(kopfzeile[j] + " ");
}
System.out.print("\t\t");
for (j = 0; j < kopfzeile.length; j++){
System.out.print(kopfzeile[j] + " ");
}
System.out.println("\n");
}
public void place(Ship s, char a, int x, boolean horiz){
int i = 0;
int y = (int) a - 97;
if (!canPlace( s, a, x, horiz)){System.out.print("Platzieren nicht möglich\n ");}
else{
// Schiff platzieren
if (horiz){
for (i = 0; i < s.getSize(); i++){
spielfeld[y][x+i] = '<';
ankert[y][x+i] = s;
}
}
else
{
for (i = 0; i < s.getSize(); i++){
spielfeld[y+i][x] = 'V';
ankert[y][x+i] = s;
}
}
}
}
/*public boolean canPlace(Ship s, char a, int x, boolean horiz){
int y = (int) a - 97;
for (int i = y - 1; i <= y +s.getSize(); i++){ // -1 +1 wegen Rand
for (int j = x - 1; j <= x + 1; j++){
//Checken ob rand
if (i < 0 || i >= spielfeld.length ||
j < 0 || j >= spielfeld[i].length) {
continue;
}
if (spielfeld[i][j] != '~'){return false;}
}
}
if (!horiz && y + s.getSize()-1 <= spielfeld.length) // vertikal
{
for (int i = y - 1; i <= y +s.getSize(); i++){ // -1 +1 wegen Rand
for (int j = x - 1; j <= x + 1; j++){
//Checken ob rand
if (i < 0 || i >= spielfeld.length ||
j < 0 || j >= spielfeld[i].length) {
continue;
}
if (spielfeld[i][j] != '~'){return false;}
}
}
for (int i = 0; i < s.getSize(); i++)
{
if(spielfeld[y+i][x] != '~')
{
System.out.println("Passd Ned");
return false;
}
}
}
if (horiz && x + s.getSize()-1 <= spielfeld[0].length-2) //horizontal
{
for (int i = y - 1; i <= y +1; i++){ // -1 +1 wegen Rand
for (int j = x - 1; j <= x + s.getSize(); j++){
//Checken ob Rand
if (i < 0 || i >= spielfeld.length ||
j < 0 || j >= spielfeld[i].length) {
continue;
}
//Checken ob Schiff
if (spielfeld[i][j] != '~'){return false;}
}
}
//Checken ob Wasser
for (int i = 0; i < s.getSize(); i++)
{
if(spielfeld[y][x+i] != '~')
{
System.out.println("Passd Ned");
return false;
}
}
}
s.redCount();
return true;
}
*/
/*
public boolean canPlace(Ship s, char a, int x, boolean horiz) {
int y = (int) a - 96;
if (!horiz) { // vertikal
if (y + s.getSize() - 1 >= spielfeld.length) return false;
for (int i = y - 1; i <= y + s.getSize(); i++) {
for (int j = x - 1; j <= x + 1; j++) {
if (i < 0 || i >= spielfeld.length ||
j < 0 || j >= spielfeld[i].length) {
continue;
}
if (spielfeld[i][j] != '~') return false;
}
}
} else { // horizontal
if (x + s.getSize() - 1 >= spielfeld[0].length) return false;
for (int i = y - 1; i <= y + 1; i++) {
for (int j = x; j <= x + s.getSize(); j++) {
if (i < 0 || i >= spielfeld.length ||
j < 0 || j >= spielfeld[i].length-2) continue;
if (spielfeld[i][j] != '~') return false;
}
}
}
return true;
}
*/
public boolean canPlace(Ship s, char a, int x, boolean horiz) {
int y = (int) a - 96; // a→0, b→1, ...
if (horiz) {
//passt ins Feld?
System.out.println("311");
if (x + s.getSize() - 1 >= spielfeld[0].length) return false;
/// Nachbarfelder
//if (a == 'a') ehemalig for (int i = y - 1; i <= y + 1; i++)
System.out.println("316");
if (y == 0){
for (int i = y; i <= y +1; i++) {
for (int j = x - 1; j <= x + s.getSize(); j++) {
if(spielfeld[i][j] == 'V') return false;
if(spielfeld[i][j] == '<') return false;
}
}
}
else if (y == 9){
for (int i = y - 1; i <= y; i++) {
for (int j = x - 1; j <= x + s.getSize(); j++) {
if(spielfeld[i][j] == 'V') return false;
if(spielfeld[i][j] == '<') return false;
else { i=0;
j=0;
for ( i = y - 1; i <= y + 1; i++) {
for ( j = x - 1; j <= x + s.getSize(); j++) {
if(spielfeld[i][j] == 'V') return false;
if(spielfeld[i][j] == '<') return false;
}
}
}
}
}
if(!horiz) { // vertikal
System.out.println("326");
if (y + s.getSize() - 1 >= spielfeld.length) return false;
// Nachbarbereich: Zeilen y-1..y+size, Spalten x-1..x+1
for (int i = y - 1; i <= y + s.getSize(); i++) {
for (int j = x - 1; j <= x + 1; j++) {
if (spielfeld[i][j] == 'V') return false;
if(spielfeld[i][j] == '<') return false;
}
}
}
return true;
}
public void shoot(char a, int x){
int y = (int) a - 97;
if (cspielfeld[y][x] == '~'){ //Miss
cspielfeld[y][x] = '0';
}
else if (cspielfeld[y][x] != 'y'){ // Hit
cspielfeld[y][x] = 'y';
ankert[y][x].hit();
ankert[y][x].sink();
}
}
}