Aleksei1968
?>

Надо написать код игры крестики нолики на еклипсе (java)​

Информатика

Ответы

Lapushkin1988

package test;

import java.util.Scanner;

public class PlusZerro {

// Размер игровово поля

private static final byte bPoleSize = 3;

// Задаем поле как (!)одномерный массив bPoleSize*bPoleSize (неожиданно?)

private static String[] pole = new String[bPoleSize * bPoleSize];

// А тут у нас задается текущий игрок

private static byte bPlayerNum = 0;

public static void main(String[] args) throws Exception {

int iTmp = 0;

Scanner sc = new Scanner(System.in);

// Инициализация поля

for (int i = 0; i < bPoleSize * bPoleSize; i++)

pole[i] = Integer.toString(++iTmp);

// Играем, пока не наступит конец игры

while (!isGameEnd()) {

nextPlayer();

while (true) {

System.out.println("\nХод игрока " + bPlayerNum);

showPole(); // Рисуем поле

System.out.print("Наберите число, куда вы хотите вставить " + (1 == bPlayerNum ? "крестик" : "нолик") + ": ");

if (sc.hasNextInt()) { // проверяем, есть ли в потоке целое число

iTmp = sc.nextInt() - 1; // считывает целое число с потока ввода и сохраняем в переменную

if (isValidInput(iTmp))

break;

}

System.out.println("Вы ввели неправильное число. Повторите ввод");

sc.next();

}

try {

putX(iTmp); // Вставляем на поле крестик или нолик

} catch (Exception e) {

System.out.println("Что-то пошло не так ;(");

}

}

showPole();

}

/**

* Проверяем корректность ввода. Введенное число должно быть по размеру поля

* и поле должно быть в этом месте еще не заполнено

*/

private static boolean isValidInput(int iIn) {

if (iIn >= bPoleSize * bPoleSize) return false;

if (iIn < 0) return false;

switch (getX(iIn)) {

case 'O':

case 'X':

return false;

}

return true;

}

/**

* Функция задает номер следующего игрока

*/

private static void nextPlayer() {

bPlayerNum = (byte) (1 == bPlayerNum ? 2 : 1);

}

/**

* Определяем, наступил конец игры или нет

* Условия:

* 1) Победили крестики

* 2) Победили нолики

* 3) Кончились ходы

*/

private static boolean isGameEnd() {

int i, j;

boolean bRowWin = false, bColWin = false;

// Проверка победы на колонках и столбиках

for (i = 0; i < bPoleSize; i++) {

bRowWin = true;

bColWin = true;

for (j = 0; j < bPoleSize-1; j++) {

bRowWin &= (getXY(i,j).charAt(0) == getXY(i,j+1).charAt(0));

bColWin &= (getXY(j,i).charAt(0) == getXY(j+1,i).charAt(0));

}

if (bColWin || bRowWin) {

System.out.println("Победил игрок " + bPlayerNum);

return true;

}

}

// Проверка победы по диагоналям

bRowWin = true;

bColWin = true;

for (i=0; i<bPoleSize-1; i++) {

bRowWin &= (getXY(i,i).charAt(0) == getXY(i+1,i+1).charAt(0));

bColWin &= (getXY(i, bPoleSize-i-1).charAt(0) == getXY(i+1, bPoleSize-i-2).charAt(0));

}

if (bColWin || bRowWin) {

System.out.println("Победил игрок " + bPlayerNum);

return true;

}

// Проверка существования новых ходов

for (i = 0; i < bPoleSize * bPoleSize; i++) {

switch (getX(i)) {

case 'O':

case 'X':

break;

default:

return false;

}

}

if (bPoleSize*bPoleSize <= i) {

System.out.println("Ничья. Кончились ходы.");

return true;

}

// Продолжаем игру

return false;

}

/**

* Получает значение координаты на поле

*/

private static String getXY(int x, int y) {

return pole[x * bPoleSize + y];

}

/**

* Получает значение координаты на поле

*/

private static char getX(int x) {

return pole[x].charAt(0);

}

/**

* Вставляет на поле крестик или нолик

*/

private static void putX(int x) {

pole[x] = 1 == bPlayerNum ? "X" : "O";

}

/**

* Вывести игровое поле

*/

private static void showPole() {

for (int i = 0; i < bPoleSize; i++) {

for (int j = 0; j < bPoleSize; j++) {

System.out.printf("%4s", getXY(i, j));

}

System.out.print("\n");

}

}

}

Извини если что то не так, не совсем в этом разбираюсь.

vitaldicky349
Была суббота, но Вася шёл в школу. По дороге он встретил своего друга Митю, который предложил сходить в кино, потому что по субботам не учился и был свободен.
1) Вася отказал сходить в кино, потому что не хотел лишний раз прогуливать школу, но договорился с Митей на воскресенье. К тому же Вася хотел исправить двойку по русскому. "Как знаешь" - ответил Митя. 
В школе одноклассник Васи Лёша предложил ему поиграть в мячик в коридоре, всё равно ведь делать нечего.
-Да он же маленький, теннисный! Нам ничего не будет!
1. Вася отказался от этой затеи. Он пошёл в класс и стал повторять правило и на уроке исправил свою двойку, ответив на отлично. А Лёша разбил мячиком лампу и его вызвали к директору.
2. Вася согласился. Всё равно на перемене было нечего делать. Мальчики весело играли, несколько раз попали в проходящих мимо ребят, и вдруг Лёша попал мячиком в лампу. Она разбилась. Мальчиков вызвали к директору, и после обещаний поговорить с родителями и уличительной беседы водворили на урок. После таких событий мальчики всё забыли и получили ещё по двойке.
2) Вася согласился. Он так давно не видел Митю! К тому же, в хорошую, солнечную погоду так не хотелось идти в школу. Мальчики пошли в кино и по дороге заметили ларёк с мороженым.
Вот бы по мороженке! Жаль, что у меня денег нет на мороженое, только на билеты хватит, - сказал Митя.
Вася тоже хотел мороженое, да и Митю бы угостил. У него были деньги, но на подарок маме на 8 марта. На другое ему нельзя было их тратить. 
1. Вася решил не тратить эти деньги. Он сказал Мите, что у него денег совсем нет и ребята пошли в кино. Они благополучно посмотрели фильм. Вася поругали, за то, что он не пошёл в школу, но двойку он исправил в понедельник.
2. Вася решил - гулять так гулять! Он купил себе и Мите по мороженому, после чего сумма в его кошельке заметно уменьшилась. После этого мальчики пошли смотреть кино. С удовольствием насладившись фильмом, Вася зашёл и за подарком маме. Он исправил двойку в понедельник, а своё отсутствие в школе объяснил родителм тем, что ходил в магазин.
asvirskiy26
Сначала числа преобразуются в двоичный код.
А=-5(10)=-101(2)
В=-8,25(10)=-1000,01(2)
Числа в формате с фиксированной запятой в памяти хранятся таким образом, что позиция запятой известна и неизменна для всех чисел (отсюда и название с фиксированной точкой) .
Для этого число А должно быть представлено в виде -101,00(2)
Пусть для хранения используется 8 разрядов. Тогда числа в прямом коде будут представлены в виде
А: 1.00101,00
В: 1.01000,01 - здесь отделённый точкой старший разряд знаковый, 1 - означает минус.
Обратный код получается инверсией всех разрядов, кроме знаковых.
А: 1.11010,11
В: 1.10111,10
Теперь нужно получить дополнительный код. Но перед этим нужно иметь в виду, что ни запятые, ни точки в памяти не хранятся, но всегда известно, где знаковый разряд и сколько разрядов в дробной части. Поэтому
А: 11101011 + 1 = 11101100
В: 11011110 + 1 = 11011111
Это и есть внутреннее представление заданных чисел в дополнительном коде.
Сложение и вычитание чисел с фиксированной точкой производится так же, как и для целых чисел.
11101100
+
11011111

111001011 - старший разряд (№8) будет выдавлен из разрядной сетки и в данном случае просто отброшен. Результат операции сложения 11001011.
Теперь можно преобразовать получившееся число в привычный десятичный вид и проверить результат.
1.1001011
1.0110100 - обратный код
1.0110100 + 1 = 1.0110101 - прямой код.
Возвращаем запятую на место
1.01101,01 -> -(8+4+1+1/4)
В десятичном виде это число -13,25
Сложение было выполнено правильно.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Надо написать код игры крестики нолики на еклипсе (java)​
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

zharovaleks
Mexx9050
Платон Демцун
mansur071199486
rozhkova
a580028r
zaha98
saljagindima
choia
sov0606332
info664
thedoomsdatdcs36
Макаров1887
olechka197835
Aleksandrovna370