Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/104: Рейтинг темы: голосов - 104, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 16

Простая игра между двумя игроками: "Угадай число"

20.02.2015, 17:43. Показов 21484. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет, Всем!
Я новичок в сфере программирования и вот у меня есть один вопрос, я создал программу которая предлагает пользователю отгадать Рандомное число:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package game;
import java.util.*;
public class game2 {
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub  
        int x ; // it will be user's input number 
  Scanner userInputScanner = new Scanner(System.in); 
  Random rand = new Random();
  int randomNumber = rand.nextInt(100); //To propose a secret number, we declare a variable randomNumber of type int and use Math.random() function to give it random value in range 1..100.
   do{
       System.out.println("Enter a positive number beetween 1-100"); 
        x = userInputScanner.nextInt();  
       if( x ==  randomNumber ) //Checking if user's  guess is right 
       {
           System.out.print("Correct\n"); 
     }
       else if ( x <  randomNumber ) // if user's number is less than randomNumber
       {
        System.out.println("Your number is less than expected, please enter another number ");
    
    }
       else if ( x > randomNumber ) // if user's number is bigger than randomNumber 
       {
        System.out.println("Your number is bigger than expected,please enter another number ");
    }
    
     } while ( x != randomNumber);
        
   }
    
    
  }

Она работает отлично но теперь мне нужно изменить иго, что бы играли 2 игрока а не один. Пробовал несколько простых способов но не получается. Помогите пожалуйста.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2015, 17:43
Ответы с готовыми решениями:

Игра между двумя игроками: "Угадать число"
Привет, Всем! На форуме есть много примеров программ, которые предлагают одному пользователю отгадать Рандомное число.А как изменить...

Игра в Крестики-нолики с двумя игроками
Доброго времени суток! Требуется программа под названием крестики-нолики (3x3). Ввод происходит таким образом: ввод: XOCCCOCCX ...

Морской бой между двумя игроками
Здравствуйте. Задача заключается в следующем: написать программу, позволяющую играть в морской бой двум игрокам, на одном компьютере....

17
 Аватар для Sanan07
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
20.02.2015, 18:21
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import java.util.Scanner;
 
 
public class GuessGame {
    
    static int first,second,number;
    
    public static void main (String [] ae) {
        
        Scanner s = new Scanner(System.in);
        
        number = (int)(Math.random()*100);
        
        
        
        System.out.println("Добро пожаловать в игру \"Угадай число\".");
        System.out.println("Играют два игрока.");
        System.out.println("Нужно вводить число в интревале от 1 до 100, кто первый угадал тот и выиграл. ");
        
        
        while(true) {
            
            System.out.println("Первый игрок введите число : ");
            first=s.nextInt();
            
            
            System.out.println("Второй игрок введите число : ");
            second=s.nextInt();
            
            if(first==number) {
                System.out.println("Поздравляем!!!Победил первый игрок!!! Это было число  - "+number);
                break;
            }
            if(second==number) {
                System.out.println("Поздравляем!!!Победил второй игрок!!! Это было число  - "+number);
                break;
            }
            
            else {
                
                System.out.println("Пока никто не угадал :(  Попробуйте еще.\n");
                
            }
            
            
        }
        
    }
 
}
1
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 16
20.02.2015, 18:54  [ТС]
Sanan07,
Спасибо, но вашем коде не выводится сообщения о том что число меньше или больше рандомного.
Можно ли добавить туда такие функции?
0
 Аватар для Sanan07
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
20.02.2015, 19:01
Лучший ответ Сообщение было отмечено iWorld как решение

Решение

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import java.util.Scanner;
 
 
public class GuessGame {
    
    static int first,second,number;
    
    public static void main (String [] ae) {
        
        Scanner s = new Scanner(System.in);
        
        number = (int)(Math.random()*100);
        
        System.out.println(number);
        
        System.out.println("Добро пожаловать в игру \"Угадай число\".");
        System.out.println("Играют два игрока.");
        System.out.println("Нужно вводить число в интревале от 1 до 100, кто первый угадал тот и выиграл. ");
        
        
        while(true) {
            
            System.out.println("Первый игрок введите число : ");
            first=s.nextInt();
            
            
            System.out.println("Второй игрок введите число : ");
            second=s.nextInt();
            
            if(first==number) {
                System.out.println("Поздравляем!!!Победил первый игрок!!! Это было число  - "+number);
                break;
            }
            if(second==number) {
                System.out.println("Поздравляем!!!Победил второй игрок!!! Это было число  - "+number);
                break;
            }
            
            else {
                
                System.out.println("Пока никто не угадал :(  Попробуйте еще.\n");
                System.out.println("Подсказка : ");
                if(first < number) {
                    
                    System.out.println("Число первого игрока меньше искомого");
                    
                }
                if(first > number) {
                    
                    System.out.println("Число первого игрока больше искомого");
                    
                }
                
                if (second < number) {
                    
                    System.out.println("Число второго игрока меньше искомого\n");
 
                }
                
                 if (second > number){
                    
                    System.out.println("Число второго игрока больше искомого\n");
 
                    
                }
                
            }
            
            
        }
        
    }
 
}
1
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 16
20.02.2015, 19:23  [ТС]
Sanan07,
Спасибо!!!
Работает 100%
Модераторы пожалуйста не закрывайте пока тему, мне еще с ним повозится очень много...
Будут вопросы, задавать буду здесь, Спасибо!
0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 16
24.04.2015, 10:49  [ТС]
Всем привет!
У меня ест одна проблема, у меня программа не заканчивается, т.е. после угадывания число, она продолжает спрашивать игроков ввести число. Как остановить программу?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package game;
 
import java.util.Scanner;
 
 
public class game4 {
    
    static int random;
    
    public static void main (String [] ae) {
        
        Scanner s = new Scanner(System.in);
        
        random = (int)(Math.random()*100);
       
        Scanner in = new Scanner(System.in);
      /* boolean play = true;
         String answer = "y";
         String playAgain;
         int y = 1; */
       
        while (true){
 
            boolean [] won ;
            won = new boolean [100];
 
            int counter=0;
            boolean stopPlay = false;
 
            System.out.println ("How Many players are there?");
            int player = in.nextInt();
 
        while(!stopPlay){
            counter++;
            int[] guesses = new int[player];
     //create array to store guesses
            System.out.println("Guess a number between 1 and 100");
            for(int i=1; i<=player; i++){
                guesses[i-1]= getGuess(i);
     }
            for(int i=1; i<=player; i++){
                System.out.print("Player " + i + ", your guess is ");
                won[i]= compare(guesses[i-1],counter);
                if (won[i] == true){
                break;
                    }
                }
            }
        
        
            
   /* System.out.println ("Play again: (y/n)");
    answer = in.nextLine();
    while (play==true);
    if (answer=="yes" || answer == "y"){
        play = true;
         
    } else if (answer == "no" || answer == "n"){
        play = false;
    } */
    }
    }
          //this is first method
            public static int getGuess(int i){
 
                Scanner in = new Scanner(System.in);
                System.out.print("Player " + i + ": ");
                int guess = in.nextInt();
                return guess;
         }
            
           
            public static boolean compare(int guess,int count){
                
                
                if(guess < random){
                    System.out.println("Too Low");
         }
                if(guess > random){
                    System.out.println("Too High");
         }
                if (guess == random){
                    System.out.println("Correct!");
                    System.out.println("The number of guesses: " + count);
                     
                    System.out.println("You Win!");            
 
                return true;
         }
            else return false;
         }
                
        
    }
0
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
24.04.2015, 10:52
Цитата Сообщение от iWorld Посмотреть сообщение
Как остановить программу?
Java
1
System.exit(0);
0
5 / 5 / 1
Регистрация: 19.04.2015
Сообщений: 38
24.04.2015, 13:56
while (true) - Это бесконечный цикл.
Немедленная остановка выше. Если ты хочешь именно выйти из цикла и вывести ещё какую-нить инфу/сделать ещё что-нибудь, тогда надо добавить метку перед циклом
label : while (true) {... if (...) {break label;}}
по-моему примерно так.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
24.04.2015, 14:26
Цитата Сообщение от AnterKan Посмотреть сообщение
тогда надо добавить метку перед циклом
label : while (true) {... if (...) {break label;}}
ни в коем случае так не делайте.
1
5 / 5 / 1
Регистрация: 19.04.2015
Сообщений: 38
24.04.2015, 14:32
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
ни в коем случае так не делайте.
это ещё почему?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
24.04.2015, 14:56
AnterKan, потому что использовать такую конструкцию плохо. Для этого есть циклы
0
5 / 5 / 1
Регистрация: 19.04.2015
Сообщений: 38
24.04.2015, 15:03
речь о том, как прервать вложенные циклы с наступлением какого-то условия. Там 3 вложенных цикла. По-моему проще сделать break по метке, чем извращаться с флагами.

коммент рядышком и читаемость кода затруднена по минимуму
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
24.04.2015, 15:08
Цитата Сообщение от AnterKan Посмотреть сообщение
По-моему проще сделать break
есть много чего проще, однако это не делает вещи правильными. Проще все в одном методе написать, однако так никто не делает.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
24.04.2015, 15:22
фу на циклах делать
0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 16
24.04.2015, 16:59  [ТС]
Цитата Сообщение от AnterKan Посмотреть сообщение
label : while (true) {... if (...) {break label;}}
Работает.
Но, я нашел простой способ удалил break здесь
Java
1
2
 if (won[i] == true){
                break;}
и вместо его поставил return.
0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 16
01.05.2015, 21:03  [ТС]
Нужна помощь, нам задали разделить этот код на классы и показать все 4 Основные принципы ООП: инкапсуляция, наследование, полиморфизм и абстракция.

И еще сказали что бы игра игралась между игроками и компьютером, т.е. компьютер тоже угадывал число.
Думаю здесь и должно применятся наследование, полиморфизм.
Я сам принцип работы понял но реализовать его здесь, не могу. Не хватает опыта и знаний.
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
02.05.2015, 22:34
Набросал на коленке.

Сама по себе игра довольно просто реализуется. Игроки ходят по очереди, пока кто-нибудь не победит.
Game
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Game {
 
    private Player[] players;
 
    public Game(Player ... players) {
        this.players = players;
        for (int i = 0; i < players.length; ++i) {
            players[i].setGuesser(players[(i + 1) % players.length]);
        }
    }
 
    public void play() {
        boolean gameOver = false;
        int i = 0;
        while (!gameOver) {
            final Player player = players[i % players.length];
            gameOver = player.play() == 0;
            if (gameOver) {
                System.out.printf("%s won!%n", player.getName());
            }
            i++;
        }
    }
}


Интерфейс игрока:
Player
Java
1
2
3
4
5
6
7
8
9
public interface Player {
    String getName();
 
    int guess(int n);
 
    int play();
 
    void setGuesser(Player player);
}


Реализация хода игрока-человека:
Human
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.io.PrintStream;
import java.util.Scanner;
 
public class Human implements Player {
 
    private Player guesser;
    private final PrintStream printer;
    private final Scanner scanner;
    private final String name;
 
    public Human(String name, PrintStream printer, Scanner scanner) {
        this.name = name;
        this.printer = printer;
        this.scanner = scanner;
    }
 
    @Override
    public String getName() {
        return name;
    }
 
    @Override
    public int guess(int n) {
        printer.printf("What do you think about %d? [<=>] ", n);
        char result = scanner.nextLine().trim().charAt(0);
        return result == '=' ? 0 : result == '<' ? -1 : 1;
    }
 
    @Override
    public int play() {
        printer.printf("%s wants your guess: ", guesser.getName());
        int n = Integer.parseInt(scanner.nextLine().trim());
        return guesser.guess(n);
    }
 
    @Override
    public void setGuesser(Player player) {
        this.guesser = player;
    }
}


Реализация игрока-компьютера:
Robot
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.io.PrintStream;
import java.util.Random;
 
public class Robot implements Player {
 
    private static final Random RANDOM = new Random();
 
    private final String name;
    private Player guesser;
    private final PrintStream printer;
 
    private int min = 0;
    private int max = Integer.MAX_VALUE;
    private int last = 5000 + RANDOM.nextInt(5000);
 
 
    private final int guessedNumber;
 
    public Robot(String name, PrintStream printer, int min, int max) {
        this.name = name;
        this.printer = printer;
        this.guessedNumber = min + RANDOM.nextInt(max - min);
    }
 
 
    @Override
    public String getName() {
        return name;
    }
 
    @Override
    public int guess(int n) {
        int result = Integer.compare(guessedNumber, n);
        printer.printf("%s says that %d is %s.%n", getName(), n,
                result < 0 ? "too much" : result > 0 ? "not enough" : "just fine"
                );
        return result;
    }
 
    @Override
    public int play() {
        printer.printf("%s think that %s guessed %d.%n", getName(), guesser.getName(), last);
        int guessResult = guesser.guess(last);
        if (guessResult != 0) {
            if (max - min <= 0) {
                throw new IllegalStateException("YOU BLOODY CHEATER! SCREW YOU.");
            }
            if (guessResult == -1) {
                max = last - 1;
            } else {
                min = last + 1;
            }
        }
        last = min + (max - min) / 2;
        return guessResult;
    }
 
    @Override
    public void setGuesser(Player player) {
        this.guesser = player;
    }
}



Запускать это как-то так:
Launcher
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import java.util.Scanner;
 
public class Launcher {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
 
        new Game(new Robot("Ander", System.out, 100, 500),
                new Robot("Bender", System.out, 100, 500),
                new Robot("Cender", System.out, 100, 500),
                new Human("Human", System.out, scanner)).play();
 
/*
        // можно сделать так, чтобы одни роботы играли:
        new Game(new Robot("Ander", System.out, 100, 500),
                new Robot("Bender", System.out, 100, 500),
                new Robot("Cender", System.out, 100, 500)).play();
*/
    }
}
1
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 16
02.05.2015, 23:55  [ТС]
lemegeton,
Спасибо, за то что сделали! Немножко сложновато для меня , попробую теперь разобрать. Хорошо когда есть реальный пример!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.05.2015, 23:55
Помогаю со студенческими работами здесь

Как синхронизировать бой между двумя или более игроками?
Суть такова - игра с стиле tower defence онлайн, предположительно на android (хотя мне кажется без разницы), один игрок выстраивает оборону...

Игра «угадай число». Задуманное число рассчитать из текущей секунды часов
Разработать программу на языке Ассемблера Intel x86 для ОС MS-DOS. Модель памяти – не регламентируется. Все числа – однозначные (1 символ в...

Игра «Угадай число». Программа задает псевдослучайное число из заданного диапазона
Игра «Угадай число». Программа задает псевдослучайное число из заданного диапазона. Диапазон и количество попыток пользователь вводит с ...

Игра Угадай число
Здравствуйте!Я только начинающий поэтому прошу сильно не бросаться камнями в мою сторону.Прошу вашего дельного совета то бишь помощи.Смысл...

Игра «Угадай число»
Здравствуйте! Помогите мне, пожалуйста. Нужно написать игру «Угадай число». Программа с помощью датчика случайных чисел выбирает число в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru