Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
Анна Сергеевна
1 / 1 / 0
Регистрация: 28.09.2012
Сообщений: 127
#1

Беспроигрышная игра для компьютера "Баше" - C#

02.03.2014, 13:53. Просмотров 605. Ответов 6
Метки нет (Все метки)

Доброго времени суток. Необходимо реализовать вариант игры, когда игрок не может выиграть у компьютера. Классический вариант игры Баше: задаем количество спичек в кучке, задаем максимум, который можно взять за один ход и компьютер сам говорит кто первый должен начать игру, чтобы игрок проиграл. Вот что получилось, работает неправильно. Где ошибка, подскажите?
C#
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Bash2
{
    class Program
    {
        public static int count;
        public static int max;
 
        public static int[] Func(int count, int max)
        {
            int[] mas = new int[30];
 
            for (int j = 0; j < mas.Count(); j++)
            {
                if ((count - max) % (max + 1) == 0)
                {
                    mas[j] = count - max;
                    if (mas[j] < 0)
                        break;
                    count = mas[j];
                }
                else
                {
                    mas[j] = count - max - 1;
                    if (mas[j] < 0)
                        break;
                    count = mas[j];
                }
            }
            return mas;
        }
 
        public static int[] mass = new int[30];
 
        public static void BahseComp(int count, int max, int[] mass)
        {
            int xod = 0;
 
            for (int i = 0; i < mass.Count(); i++)
            {
                if (count - mass[i] > max)
                {
                    Console.WriteLine("Компьютер забрал " + Convert.ToString(max));
                    count = count - max;
                    Console.WriteLine("Осталось " + Convert.ToString(count));
                }
                else
                {
                    Console.WriteLine("Компьютер забрал " + Convert.ToString(count - mass[i]));
                    count = count - (count - mass[i]);
                    Console.WriteLine("Осталось " + Convert.ToString(count));
                }
                if (count == 0)
                {
                    Console.WriteLine("Выиграл компьютер");
                    break;
                }
 
                Console.WriteLine("Ход игрока ");
                xod = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Осталось " + Convert.ToString(count - xod));
                count = count - xod;
                if (count == 0)
                {
                    Console.WriteLine("Выиграл игрок");
                    break;
                }
 
            }
        }
 
        public static void BahseIgr(int count, int max, int[] mass)
        {
            int xod = 0;
 
            for (int i = 0; i < mass.Count(); i++)
            {
                Console.WriteLine("Ход игрока ");
                xod = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Осталось " + Convert.ToString(count - xod));
                count = count - xod;
                if (count == 0)
                {
                    Console.WriteLine("Выиграл игрок");
                    break;
                }
                if (count - mass[i] > max)
                {
                    Console.WriteLine("Компьютер забрал " + Convert.ToString(count - mass[i] - 1));
                    count = count - (count - mass[i] - 1);
                    Console.WriteLine("Осталось " + Convert.ToString(count));
                }
                else
                {
                    Console.WriteLine("Компьютер забрал " + Convert.ToString(count - mass[i]));
                    count = count - (count - mass[i]);
                    Console.WriteLine("Осталось " + Convert.ToString(count));
                }
                if (count == 0)
                {
                    Console.WriteLine("Выиграл компьютер");
                    break;
                }
            }
        }
 
        public static int min(int[] mas)
        {
            int min = mas[0];
            for (int i = 0; i < mas.Count(); i++)
            {
                if (min > mas[i] && min != 0)
                    min = mas[i];
            }
 
            return min;
        }
 
        static void Main(string[] args)
        {
            Console.WriteLine("Введите количество камней = ");
            count = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("Введите максимум = ");
            max = Convert.ToInt32(Console.ReadLine());
 
            mass = Func(count, max);
 
            for (int i = 0; i < mass.Count(); i++)
            {
                if (mass[i] == 0 || mass[i] < 0)
                    break;
 
                Console.WriteLine(mass[i]);
            }
 
            if ((count % (max + 1)) == 0)
            {
                Console.WriteLine("Первым ходит игрок");
                BahseIgr(count, max, mass);
            }
            else
            {
                Console.WriteLine("Первым ходит компьютер");
                BahseComp(count, max, mass);
            }
 
            Console.ReadKey();
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.03.2014, 13:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Беспроигрышная игра для компьютера "Баше" (C#):

Игра "Змейка", ошибка "Globals.Close не объявлен", неправильная логика игры - C#
Нашёл в интернете код игры &quot;змейка&quot; и саму скомпилированную игру. Но есть загвоздка. А точнее две using System; using...

Консольная игра "ядерная угроза" для оценки - C#
Выкладываю на общий суд, кансольную игру ядерная угроза! Но игра еще сыровата, Протестируйте код, и скажите как его сделать...

"student" не содержит определения для "Name" и не был найден метод расширения "Name" - C#
Здравствуйте. Помогите пожалуйста найти ошибку (&quot;student&quot; не содержит определения для &quot;Name&quot; и не был найден метод расширения...

Описать класс "поезд", содержащий поля "пункт назначения", "номер поезда", "время отправления" - C#
Помогите пожалуйста с классом Описать класс «поезд», содержащий следующие закрытые поля: • название пункта назначения; • номер...

"String" не содержит определение для "Lenght". Не удалось найти метод расширения "Lenght" - C#
Здравствуйте, не могу скомпилировать код. Выдает ошибку, что &quot;string&quot; не содержит определение для &quot;Lenght&quot;. Зеленой волнистой линией...

Методом вычислить тип треугольника: "не существует", "тупоугольный", "прямоугольный", "остроугольный" - C#
Помогите пожалуйста С помощью метода вычислить тип треугольника::cry: 1) если первый параметр задает, на основании чего определить тип...

6
quakeer
26 / 26 / 19
Регистрация: 25.07.2013
Сообщений: 133
03.03.2014, 06:47 #2
Привет.
Я так понимаю классическая игра подразумевает под собой взятие не более 3-х спичек и это мы указываем в "Введите максимум ="? Или мы можем указать любой максимум? Хотя, когда я указываю, например 2, то все-ровно могу взять любое количество спичек, хоть все оставшиеся Может проблема в этом?)
1
Анна Сергеевна
1 / 1 / 0
Регистрация: 28.09.2012
Сообщений: 127
03.03.2014, 16:15  [ТС] #3
Привет. Максимум может быть любой, просто ограничение надо прописать, что больше максимума взять нельзя. Дело сейчас в том, что я могу выиграть у компьютера, а нужно, чтобы компьютер выигрывал у меня.
0
quakeer
26 / 26 / 19
Регистрация: 25.07.2013
Сообщений: 133
03.03.2014, 16:39 #4
Тогда по идее нужно сделать так, чтобы после каждого хода игрока компьютер занова прощитывал все ходы и выбирал те, которые ведут к выигрышу.
1
Анна Сергеевна
1 / 1 / 0
Регистрация: 28.09.2012
Сообщений: 127
03.03.2014, 17:18  [ТС] #5
Насколько я знаю, стратегию нужно прописать так, чтобы на предпоследнем шаге у противника (т.е. у нас) осталось максимум+1, тогда 100% выиграет компьютер. Просто не представляю как в коде можно это реализовать?
0
quakeer
26 / 26 / 19
Регистрация: 25.07.2013
Сообщений: 133
04.03.2014, 18:04 #6
Как успехи? Что-нибудь получилось? Самому стало интересно У меня пока что не получается.
1
Анна Сергеевна
1 / 1 / 0
Регистрация: 28.09.2012
Сообщений: 127
04.03.2014, 23:20  [ТС] #7
я работаю над этим=) скоро получится, сроки сдачи поджимают=)
0
04.03.2014, 23:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.03.2014, 23:20
Привет! Вот еще темы с ответами:

Проблема при сравнении: "Оператор ">" не может применяться к операндам типа "Т" и "Т"" - C#
Добрый день , пишу сортировку , все делаю на основе Т , но вот в чем проблемма public class BubbleSort&lt;T&gt;:ISortStrategy&lt;T&gt; { ...

Игра Баше/спички - C#
Здравствуйте, нуждаюсь в помощи создания алгоритма беспроигрышной игры компьютера при следующей задачи: &quot;Имеется куча спичек со случайным...

Напишите программу, которая подсчитывает, сколько учащихся получило "2", "3", "4" и "5" - C#
Помогите, пожалуйста, с решением следующей задачи: учащиеся сдают экзамены по нескольким предметам. Результаты экзаменов занесены в...

Поиск в массиве. Ошибка "Оператор "&&" не может применяться к операндам типа "bool" и "double"" - C#
Найти номер последнего минимального элемента среди положительных четных элементов, лежащих правее первого отрицательного элемента. В 24...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru