Amiral Battı Oyunu (Programlamaya Giriş)
25.03.2010 - 13:39 tarihinde vefa gönderdi
- Oyun 10 x 10'luk bir matriste oynanıyor.
- 1'lik, 2'lik, 3'lük ve 4'lük olmak üzere 4 farklı boyutta gemi vardır.
- 1'lik gemiden 4 tane, 2'lik gemiden 3 tane, 3'lük gemiden 2 tane, 4'lük gemiden 1 tane vardır.
- Gemiler rasgele yerleştiriliyor.
- Gemilerin yönü yatay ve dikey olabilir, çapraz olamaz.
- Gemiler bitişik olamaz.
Örnek ekran çıktısı:
0 0 0 0 3 0 1 0 0 4
0 0 0 0 3 0 0 0 0 4
0 0 0 0 3 0 0 0 0 4
2 0 0 0 0 0 0 0 0 4
2 0 0 0 2 0 0 1 0 0
0 0 1 0 2 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 2 2 0 3 3 3 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Satiri giriniz : 0
Sutunu giriniz : 2
Kaynak kod:
class Admiral { public static void main(String args[]) throws Exception { java.util.Random generator = new java.util.Random(System.currentTimeMillis()); //gemilerin yerleştirildiği matris int board[][] = new int [10][10]; //oyuncunun hamlelerinin tutulduğu matris int player[][] = new int [10][10]; //gemilerin adedini tutan dizi //0 nolu eleman kullanılmıyor int ship[] = {0, 4, 3, 2, 1}; int i, j, row, col, size; int num, dir, shipSize, count, r, c, rl, cl, flag; int right, down, hit; row = 10; col = 10; size = 5; count = 0; shipSize = 1; while (shipSize <= 4) { //yon üretiliyor (0 sağa, 1 aşağıya) dir = generator.nextInt(2); //yöne göre satır sütun sınırları ve //yerleştirilecek geminin sınırları belirleniyor if (dir == 0) { rl = row; cl = col - shipSize + 1; right = 2 + shipSize; down = 3; } else { rl = row - shipSize + 1; cl = col; right = 3; down = 2 + shipSize; } //geminin nereye yerleştirileceği üretiliyor r = generator.nextInt(rl); c = generator.nextInt(cl); //geminin yerleştirileceği yerin //boş olup olmadığına bakılıyor flag = 0; for (i = r-1; i < (r-1) + down; i = i + 1) for (j = c-1; j < (c-1) + right; j = j + 1) if (i >=0 && i < row && j >= 0 && j < col) if (board[i][j] != 0) flag = 1; //flag'in 0'a eşit olması geminin yerleştirileceği yerin //boş olduğunu gösteriyor. if (flag == 0) { //gemi yerleştiriliyor for (i = r; i < r + down - 2; i = i + 1) for (j = c; j < c + right - 2; j = j + 1) board[i][j] = shipSize; //adet bir arttırılıyor count = count + 1; //gemiden istenen adet yerleştirilmişse //bir sonraki gemiye geçiliyor if (ship[shipSize] == count) { shipSize = shipSize + 1; count = 0; } } } //gemilerin yerleştirildiği matris yazdırılıyor for (i = 0; i < row; i = i + 1) { for (j = 0; j < col; j = j + 1) System.out.print(board[i][j] + " "); System.out.println(); } System.out.println(); //toplam 20 isabetli atış yapıldığında oyun bitiyor count = 0; hit = 0; while(hit < 20) { //atış sayısı bir arttırılıyor count = count + 1; //atış yapılıyor System.out.print("Satiri giriniz : "); r = Keyboard.readInt(); System.out.print("Sutunu giriniz : "); c = Keyboard.readInt(); //atışın isabetli olup olmadığına bakılıyor //eğer isabetli ise oyuncunun matrisine //gemi numarası yazdırılıyor //değilse 9 sayısı yazdırılıyor if (board[r][c] != 0){ hit = hit + 1; player[r][c] = board[r][c]; } else player[r][c] = 9; //gemilerin matrisi yazdırılıyor for (i = 0; i < row; i = i + 1) { for (j = 0; j < col; j = j + 1) System.out.print(board[i][j] + " "); System.out.println(); } System.out.println(); //oyuncunun matrisi yazdırılıyor for (i = 0; i < row; i = i + 1) { for (j = 0; j < col; j = j + 1) System.out.print(player[i][j] + " "); System.out.println(); } } System.out.println("Tebrikler! " + count + " adimda bildiniz."); } }
Etiketler: