Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 14
1

Как написать игру "Цепь"?

21.05.2012, 21:48. Показов 3112. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
• Данное приложение является реализацией известной логической игры. В данной реализации предусматривается игра двух игроков на квадратном поле фиксированного размера. Цель игры - построить непрерывную линию, соединяющую горизонтальные или вертикальные (для каждого из игроков соответственно) стороны игрового поля, причем линия считается непрерывной, если фишки граничат друг с другом по горизонтали, вертикали или диагонали. Выигрывает тот игрок, который первым построит свою линию.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.05.2012, 21:48
Ответы с готовыми решениями:

Как написать мини-игру?
Здравствуйте, такая ситуация. Нужно написать мини-игру. Суть: Задается с клавиатуры число- это...

Кто нибудь знает как написать игру на С ?)
Зраствуйте Можно ли написать крестики нолики на С ? И как это сделать ? Дайте идею или код....

Как написать игру в консоль?
Всем привет, начинающий программист, ребята помогите написать игру. Создание игры в кости. ...

Как написать игру пинпонг
Как написать игру пинпонг пожалуста дайте исходник

22
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
21.05.2012, 23:28 2
Вам нужно написать только интерфейс для игры двух людей, или еще и бота, который играл бы с человеком?
0
134 / 106 / 10
Регистрация: 22.05.2010
Сообщений: 533
22.05.2012, 08:39 3
А какой язык реализации?..
Впрочем, я представляю себе стандартные классы поля, игрока (если будет бот), графики, игровой класс. В поле реализована удобная структура данных для данной игры. В графике - рисование поля. В игровом - старт игры, конец игры, всевозможные условия. Можно интерфейс сюда же (вроде, проект не очень большой). Конечно, это всё для ООП.
Довольно интересная задача. Советую сделать самому =)
0
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 10:18 4
Цитата Сообщение от AnyOne697 Посмотреть сообщение
А какой язык реализации?..
Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум C++ > Форум С++ для начинающих
Угадайте
Цитата Сообщение от AnyOne697 Посмотреть сообщение
Довольно интересная задача. Советую сделать самому =)
Я думаю, человек сюда пишет потому, что самому не получилось...

Цитата Сообщение от AnyOne697 Посмотреть сообщение
проект не очень большой
Согласен, если без бота. Если с ботом, то следует серьезно задуматься о стратегии, и я уже даже не знаю, какой будет размер проэкта...
0
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 14
22.05.2012, 10:46  [ТС] 5
Да мне без разнеце на каком языкебез бота надо,но я не поиму не как,как это можно сделать,помогите,а?)
0
50 / 50 / 12
Регистрация: 22.05.2011
Сообщений: 326
22.05.2012, 10:57 6
Без бота?
0
Kastaneda
22.05.2012, 10:57
  #7

Не по теме:

Цитата Сообщение от АндрейСГУПС Посмотреть сообщение
Да мне без разнеце на каком языке
Посмотри в сторону языков ЛогоМиры (2 и 3) и Scratch.

0
50 / 50 / 12
Регистрация: 22.05.2011
Сообщений: 326
22.05.2012, 10:59 8
Мне кажется, ты не на тот форум зашел. Тут задачи решают, а не пишут программы "а + б". У тебя задача - тупо реализовать....что значит нет идей - там где ты учишься, хоть чему то тебя должны были научить.
0
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 14
22.05.2012, 11:49  [ТС] 9
да без бота

Добавлено через 1 минуту
ты уважаемый ошибаешься,на сказали пишите,а как и че сами разбирайтесь,вот
0
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 13:05 10
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
class Field
{
private:
int size;
int* *f;
public:
Field(int n)
{
size=n;
f=new int*[n];
for(int i=0; i<n; i++)
{
f[i]=new int[n];
for(int j=0; j<n; j++)
f[i][j]=0;
}
}
void DrawF()
{
//Здесь рисуем поле. Пиксельную графику знаю не очень, потому здесь напишу псевдографику.
for(int i=0; i<size+2; i++)
printf("-");
printf("\n");
for(int i=0; i<size; i++)
{
printf("|");
for(int j=0; j<size; j++)
if(f[i][j]==0)
printf(" ");
else if(f[i][j]==1)
printf("X");
else printf("O");
printf("|\n");
}
for(int i=0; i<size+2; i++)
printf("-");
printf("\n");
}
bool Turn(int Player, int Vert, int Gor)
{
if(f[Vert][Gor]==0)
{
f[Vert][Gor]=Player;
return true;
}
return false;
}
int IsVictory()
{
bool* *tmp=new bool*[size];
for(int i=0; i<size; i++)
{
tmp[i]=new bool[size];
for(int j=0; j<size; j++)
tmp[i][j]=false;
}
for(int i=0; i<size; i++)
if(f[0][i]==1)
tmp[0][i]=true;
bool IsChanges=false;
for(int i=0; i<size*size; i++)
{
IsChanges=false;
for(int j=1; j<size; j++)
{
for(int k=0; k<size; k++)
{
if((f[j][k]==1)&&((tmp[j-1][k]==true)||((k>0)&&(tmp[j][k-1]==true))||((k<size-1)&&(tmp[j][k+1]==true))||((j<size-1)&&(tmp[j+1][k]==true))))
{
tmp[j][k]=true;
IsChanges=true;
}
}
}
if(IsChanges==false)
break;
}
IsChanges=false;
for(int i=0; i<size; i++)
if(tmp[size-1][i]==true)
{
IsChanges=true;
break;
}
if(IsChanges==true)
return 1;
for(int i=0; i<size; i++)
for(int j=0; j<size; j++)
tmp[i][j]=false;
for(int i=0; i<size; i++)
if(f[i][0]==2)
tmp[i][0]=true;
for(int i=0; i<size*size; i++)
{
IsChanges=false;
for(int j=1; j<size; j++)
{
for(int k=0; k<size; k++)
{
if((f[k][j]==2)&&((tmp[k][j-1]==true)||((k>0)&&(tmp[k-1][j]==true))||((k<size-1)&&(tmp[k+1][j]==true))||((j<size-1)&&(tmp[k][j+1]==true))))
{
tmp[k][j]=true;
IsChanges=true;
}
}
}
if(IsChanges==false)
break;
}
IsChanges=false;
for(int i=0; i<size; i++)
if(tmp[i][n-1]==true)
{
IsChanges=true;
break;
}
if(IsChanges==true)
return 2;
return 0;
}
~Field()
{
delete f;
}
};
Вот класс. Создаем поле так:
C++
1
a=Field(5);//Поле 5 на 5
Ходим так:
C++
1
bool b=a.Turn(1,3,4);//Ход первого игрока в 3 ряд 4-й столбец. При этом, если ход успешен (не на занятую клетку), то b==true, иначе false
Рисуем поле так:
C++
1
a.DrawF();
И проверяем, не победил ли один из игроков, так:
C++
1
int c=a.IsVictory();//Если с==0, то победы еще нет, иначе с -- номер победившего игрока
2
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 14
22.05.2012, 14:31  [ТС] 11
Спасибо большое!!!)

Добавлено через 1 минуту
Спасибо большое!)
0
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 14:43 12
Если что -- обращайтесь...
0
0 / 0 / 0
Регистрация: 21.05.2012
Сообщений: 14
22.05.2012, 14:47  [ТС] 13
хорошо)))
0
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
24.05.2012, 21:27 14
Методы Save\Load:
(добавляем в класс Field)
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
bool Save(AnsiString Name)//1 -- сохранение успешно
{
FILE* fl=fopen(Name,r);
if(fl!=NULL)
{
printf("This file is already exist. Rewrite it?(Y\N)\n");
char c;
scanf("%c",&c);
while((c!='N')&&(c!='Y')&&(c!='n')&&(c!='y'))
scanf("%c",&c);
if((c=='N')||(c=='n'))
{
return false;
}
}
fclose(fl);
fl=fopen(Name,"w");
fprintf(fl,"%d\n",size);
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
fprintf(fl,"%d ",f[i][j]);
fprintf(fl,"\n");
}
printf("Save complete!\n");
fclose(fl);
return true;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Load(AnsiString Name)
{
FILE* fl=fopen(Name,"r");
if(fl==NULL)
printf("File not found\n");
else
{
fscanf(fl,"%d",&size);
f=new int*[size];
for(int i=0; i<size; i++)
f[i]=new int[size];
for(int i=0; i<size; i++)
for(int j=0; j<size; j++)
fscanf(fl,"%d",&f[i][j]);
fclose(fl);
}
}
Вызов:
C++
1
2
3
4
5
Field a(5);
...
bool q=a.Save(Name);//q=true, если сохранено успешно, и false, если нет
...
a.Load(Name);
Кто поседний ходил всегда можно определить по количеству фишек одного и другого игрока. Как конвертить строку из char* в AnsiString -- не помню. Поищите.
И еще, изменение в методе IsVictory:
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
int IsVictory()
{
bool IsChanges=false;
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
if(f[i][j]==0)
{
IsChanges=true;
break;
}
if(IsChanges==true)
break;
}
if(IsChanges==false)
return 3;
bool* *tmp=new bool*[size];
for(int i=0; i<size; i++)
{
tmp[i]=new bool[size];
for(int j=0; j<size; j++)
tmp[i][j]=false;
}
for(int i=0; i<size; i++)
if(f[0][i]==1)
tmp[0][i]=true;
IsChanges=false;
for(int i=0; i<size*size; i++)
{
IsChanges=false;
for(int j=1; j<size; j++)
{
for(int k=0; k<size; k++)
{
if((f[j][k]==1)&&((tmp[j-1][k]==true)||((k>0)&&(tmp[j][k-1]==true))||((k<size-1)&&(tmp[j][k+1]==true))||((j<size-1)&&(tmp[j+1][k]==true))))
{
tmp[j][k]=true;
IsChanges=true;
}
}
}
if(IsChanges==false)
break;
}
IsChanges=false;
for(int i=0; i<size; i++)
if(tmp[size-1][i]==true)
{
IsChanges=true;
break;
}
if(IsChanges==true)
return 1;
for(int i=0; i<size; i++)
for(int j=0; j<size; j++)
tmp[i][j]=false;
for(int i=0; i<size; i++)
if(f[i][0]==2)
tmp[i][0]=true;
for(int i=0; i<size*size; i++)
{
IsChanges=false;
for(int j=1; j<size; j++)
{
for(int k=0; k<size; k++)
{
if((f[k][j]==2)&&((tmp[k][j-1]==true)||((k>0)&&(tmp[k-1][j]==true))||((k<size-1)&&(tmp[k+1][j]==true))||((j<size-1)&&(tmp[k][j+1]==true))))
{
tmp[k][j]=true;
IsChanges=true;
}
}
}
if(IsChanges==false)
break;
}
IsChanges=false;
for(int i=0; i<size; i++)
if(tmp[i][n-1]==true)
{
IsChanges=true;
break;
}
if(IsChanges==true)
return 2;
return 0;
}
Здесь добавлен вариант ничьи, когда все клетки заняты, но никто не победил. В таком случае IsVictory вернет 3

Добавлено через 2 часа 23 минуты
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
#include <stdio.h>
#include <conio.h>
#include <Field.h>
int main()
{
printf("Input size of gaming field\n");
int n;
scanf("%d",&n);
Field q(n);
while(q.IsVictory()!=0)
{
int Pl=q.CheckTurn()+1;
printf("Player %d\n\n",Pl);
q.DrawF();
printf("\n");
printf("Input vertical and gorizontal coordinates\n");
int vert=0;
int gor=0;
while((vert<1)||(vert>size)||(gor<1)||(gor>size)||(!q.Turn(Pl,vert,gor)))
{
scanf("%d%d",&vert,&gor);
}
printf("\n");
q.DrawF();
printf("-------------------------\n");
}
if(q.IsVictory()==1)
printf("1-ST PLAYER WINS!\n");
else if(q.IsVictory()==2)
printf("2-ND PLAYER WINS!\n");
else
printf("DRAW\n");
getch();
return 0;
}
0
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 4
04.05.2015, 18:33 15
У меня ошибка
112 if(tmp[i][n-1]==true)

Добавлено через 48 секунд
In member function 'int Field::IsVictory()':
'n' was not declared in this scope

Добавлено через 9 минут
Цитата Сообщение от UFO94 Посмотреть сообщение
int Pl=q.CheckTurn()+1;
в коде такого столбца нет
0
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
04.05.2015, 23:19 16
Там вместо n должно быть size. Ошибочка вышла...
1
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 4
05.05.2015, 01:00 17
ну а вместо столбца
int Pl=q.CheckTurn()+1;
что должно бить?

Добавлено через 3 минуты
[Error] 'class Field' has no member named 'CheckTurn'

Добавлено через 37 секунд
while((vert<1)||(vert>size)||(gor<1)||(gor>size)||(!q.Turn(Pl,vert,gor)))
здесь ошибка в инт мейне
[Error] 'size' was not declared in this scope

Добавлено через 1 минуту
а так замена n на size помогло спасибо

Добавлено через 3 минуты
заменил int Pl=q.CheckTurn()+1;
на int Pl=q.IsVictory()+1;
и добавил int size;
но после ввода размера поля пишет просто DRAW

Добавлено через 1 минуту
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <stdio.h>
#include <conio.h>
 
class Field
{
private:
int size;
int* *f;
public:
Field(int n)
{
size=n;
f=new int*[n];
for(int i=0; i<n; i++)
{
f[i]=new int[n];
for(int j=0; j<n; j++)
f[i][j]=0;
}
}
void DrawF()
{
for(int i=0; i<size+2; i++)
printf("-");
printf("\n");
for(int i=0; i<size; i++)
{
printf("|");
for(int j=0; j<size; j++)
if(f[i][j]==0)
printf(" ");
else if(f[i][j]==1)
printf("X");
else printf("O");
printf("|\n");
}
for(int i=0; i<size+2; i++)
printf("-");
printf("\n");
}
bool Turn(int Player, int Vert, int Gor)
{
if(f[Vert][Gor]==0)
{
f[Vert][Gor]=Player;
return true;
}
return false;
}
int IsVictory()
{
bool IsChanges=false;
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
if(f[i][j]==0)
{
IsChanges=true;
break;
}
if(IsChanges==true)
break;
}
if(IsChanges==false)
return 3;
bool* *tmp=new bool*[size];
for(int i=0; i<size; i++)
{
tmp[i]=new bool[size];
for(int j=0; j<size; j++)
tmp[i][j]=false;
}
for(int i=0; i<size; i++)
if(f[0][i]==1)
tmp[0][i]=true;
IsChanges=false;
for(int i=0; i<size*size; i++)
{
IsChanges=false;
for(int j=1; j<size; j++)
{
for(int k=0; k<size; k++)
{
if((f[j][k]==1)&&((tmp[j-1][k]==true)||((k>0)&&(tmp[j][k-1]==true))||((k<size-1)&&(tmp[j][k+1]==true))||((j<size-1)&&(tmp[j+1][k]==true))))
{
tmp[j][k]=true;
IsChanges=true;
}
}
}
if(IsChanges==false)
break;
}
IsChanges=false;
for(int i=0; i<size; i++)
if(tmp[size-1][i]==true)
{
IsChanges=true;
break;
}
if(IsChanges==true)
return 1;
for(int i=0; i<size; i++)
for(int j=0; j<size; j++)
tmp[i][j]=false;
for(int i=0; i<size; i++)
if(f[i][0]==2)
tmp[i][0]=true;
for(int i=0; i<size*size; i++)
{
IsChanges=false;
for(int j=1; j<size; j++)
{
for(int k=0; k<size; k++)
{
if((f[k][j]==2)&&((tmp[k][j-1]==true)||((k>0)&&(tmp[k-1][j]==true))||((k<size-1)&&(tmp[k+1][j]==true))||((j<size-1)&&(tmp[k][j+1]==true))))
{
tmp[k][j]=true;
IsChanges=true;
}
}
}
if(IsChanges==false)
break;
}
IsChanges=false;
for(int i=0; i<size; i++)
if(tmp[i][size-1]==true)
{
IsChanges=true;
break;
}
if(IsChanges==true)
return 2;
return 0;
}
~Field()
{
delete f;
}
};
int main()
{
printf("Input size of gaming field\n");
int n;
scanf("%d",&n);
Field q(n);
while(q.IsVictory()!=0)
{
int Pl=q.IsVictory()+1;
printf("Player %d\n\n",Pl);
q.DrawF();
printf("\n");
printf("Input vertical and gorizontal coordinates\n");
int vert=0;
int gor=0;
int size=0;
while((vert<1)||(vert>size)||(gor<1)||(gor>size)||(!q.Turn(Pl,vert,gor)))
{
scanf("%d%d",&vert,&gor);
}
printf("\n");
q.DrawF();
printf("-------------------------\n");
}
if(q.IsVictory()==1)
printf("1-ST PLAYER WINS!\n");
else if(q.IsVictory()==2)
printf("2-ND PLAYER WINS!\n");
else
printf("DRAW\n");
getch();
return 0;
}
Добавлено через 8 минут
пробовал в OpenGL не получилось
0
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
05.05.2015, 01:38 18
В мэйне: n и size обозначают одно и то же, это я по невнимательности. Так что или все n в мэйне надо переименовать в size, или все size в n.
По CheckTurn: эта (так и не написанная мною) функция должна возвращать 0, если сейчас должен ходить 1-й игрок (количество 0 и Х на поле одинаковое), и 1 -- если сейчас должен ходить 2-й игрок (Х на 1 больше, чем 0). Код примерно такой (в классе Field, после "public:"):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int CheckTurn()
{
   int dif = 0;
   for(int i = 0; i < size; i++)
      for(int j = 0; j < size; j++)
         if(f[i][j] == 1)
            dif++;
         else if(f[i][j] == 2)
            dif--;
 
   if(dif == 0)
      return 0;
   if(dif == 1)
      return 1;
   return -1;//Ошибка! Невозможное состояние поля!
}
Добавлено через 4 минуты
Кажется, в мэйне еще ошибка в 10 строчке:
while(q.IsVictory()!=0) нужно заменить на while(q.IsVictory()==0)
1
0 / 0 / 0
Регистрация: 04.05.2015
Сообщений: 4
05.05.2015, 17:31 19
Опять ошибка после ввода поля и координат не работает

Добавлено через 2 минуты
Есть поле но оно не заполняется(

Добавлено через 1 минуту
После удаления
C++
1
2
3
4
5
6
if(q.IsVictory()==1)
printf("1-ST PLAYER WINS!\n");
else if(q.IsVictory()==2)
printf("2-ND PLAYER WINS!\n");
else
printf("DRAW\n");
выбывает второе поле но тоже ничего

Добавлено через 4 минуты
если не тяжело не могли бы вы скинуть образец который работает

Добавлено через 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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#include <stdio.h>
#include <conio.h>
 
class Field
{
private:
int size;
int* *f;
public:
    int CheckTurn()
{
   int dif = 0;
   for(int i = 0; i < size; i++)
      for(int j = 0; j < size; j++)
         if(f[i][j] == 1)
            dif++;
         else if(f[i][j] == 2)
            dif--;
 
   if(dif == 0)
      return 0;
   if(dif == 1)
      return 1;
   return -1;//??????! ??????????? ????????? ????!
}
Field(int n)
{
size=n;
f=new int*[n];
for(int i=0; i<n; i++)
{
f[i]=new int[n];
for(int j=0; j<n; j++)
f[i][j]=0;
}
}
void DrawF()
{
for(int i=0; i<size+2; i++)
printf("-");
printf("\n");
for(int i=0; i<size; i++)
{
printf("|");
for(int j=0; j<size; j++)
if(f[i][j]==0)
printf(" ");
else if(f[i][j]==1)
printf("X");
else printf("O");
printf("|\n");
}
for(int i=0; i<size+2; i++)
printf("-");
printf("\n");
}
bool Turn(int Player, int Vert, int Gor)
{
if(f[Vert][Gor]==0)
{
f[Vert][Gor]=Player;
return true;
}
return false;
}
int IsVictory()
{
bool IsChanges=false;
for(int i=0; i<size; i++)
{
for(int j=0; j<size; j++)
if(f[i][j]==0)
{
IsChanges=true;
break;
}
if(IsChanges==true)
break;
}
if(IsChanges==false)
return 3;
bool* *tmp=new bool*[size];
for(int i=0; i<size; i++)
{
tmp[i]=new bool[size];
for(int j=0; j<size; j++)
tmp[i][j]=false;
}
for(int i=0; i<size; i++)
if(f[0][i]==1)
tmp[0][i]=true;
IsChanges=false;
for(int i=0; i<size*size; i++)
{
IsChanges=false;
for(int j=1; j<size; j++)
{
for(int k=0; k<size; k++)
{
if((f[j][k]==1)&&((tmp[j-1][k]==true)||((k>0)&&(tmp[j][k-1]==true))||((k<size-1)&&(tmp[j][k+1]==true))||((j<size-1)&&(tmp[j+1][k]==true))))
{
tmp[j][k]=true;
IsChanges=true;
}
}
}
if(IsChanges==false)
break;
}
IsChanges=false;
for(int i=0; i<size; i++)
if(tmp[size-1][i]==true)
{
IsChanges=true;
break;
}
if(IsChanges==true)
return 1;
for(int i=0; i<size; i++)
for(int j=0; j<size; j++)
tmp[i][j]=false;
for(int i=0; i<size; i++)
if(f[i][0]==2)
tmp[i][0]=true;
for(int i=0; i<size*size; i++)
{
IsChanges=false;
for(int j=1; j<size; j++)
{
for(int k=0; k<size; k++)
{
if((f[k][j]==2)&&((tmp[k][j-1]==true)||((k>0)&&(tmp[k-1][j]==true))||((k<size-1)&&(tmp[k+1][j]==true))||((j<size-1)&&(tmp[k][j+1]==true))))
{
tmp[k][j]=true;
IsChanges=true;
}
}
}
if(IsChanges==false)
break;
}
IsChanges=false;
for(int i=0; i<size; i++)
if(tmp[i][size-1]==true)
{
IsChanges=true;
break;
}
if(IsChanges==true)
return 2;
return 0;
}
~Field()
{
delete f;
}
};
int main()
{
printf("Input size of gaming field\n");
int n;
scanf("%d",&n);
Field q(n);
while(q.IsVictory()==0);
{
int Pl=q.CheckTurn()+1;
printf("Player %d\n\n",Pl);
q.DrawF();
printf("\n");
printf("Input vertical and gorizontal coordinates\n");
int vert=0;
int gor=0;
int size=0;
while((vert<1)||(vert>size)||(gor<1)||(gor>size)||(!q.Turn(Pl,vert,gor)))
{
scanf("%d%d",&vert,&gor);
}
printf("\n");
q.DrawF();
printf("-------------------------\n");
}
if(q.IsVictory()==1)
printf("1-ST PLAYER WINS!\n");
else if(q.IsVictory()==2)
printf("2-ND PLAYER WINS!\n");
else
printf("DRAW\n");
getch();
return 0;
}
Добавлено через 1 минуту
БУДУ СИЛЬНО БЛАГОДАРЕН ЗА ОБРАЗЕЦ)

Добавлено через 4 минуты
ТОКА РОБОЧИЙ

Добавлено через 2 часа 11 минут
С другими проектами у меня проблем нету но этот меня уже достал логику я понял но прописать ее в коде для меня большая проблема
0
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
05.05.2015, 19:05 20
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
#include <stdio.h>
#include <conio.h>
 
class Field
{
private:
    int size;
    int* *f;
public:
    int CheckTurn()
    {
        int dif = 0;
        for(int i = 0; i < size; i++)
            for(int j = 0; j < size; j++)
                if(f[i][j] == 1)
                    dif++;
                else if(f[i][j] == 2)
                    dif--;
 
        if(dif == 0)
            return 0;
        if(dif == 1)
            return 1;
        return -1;//??????! ??????????? ????????? ????!
    }
    Field(int n)
    {
        size=n;
        f=new int*[n];
        for(int i=0; i<n; i++)
        {
            f[i]=new int[n];
            for(int j=0; j<n; j++)
                f[i][j]=0;
        }
    }
    void DrawF()
    {
        printf("/");
        for(int i=0; i<size-1; i++)
        {
            printf("X ");
        }
        printf("X\\");
        printf("\n");
        for(int i=0; i<size; i++)
        {
            printf("O");
            for(int j=0; j<size; j++)
            {
                if(f[i][j]==0)
                    printf(" ");
                else if(f[i][j]==1)
                    printf("X");
                else printf("O");
                if(j!=size-1)
                    printf(" ");
            }
            printf("O\n");
        }
        printf("\\");
        for(int i=0; i<size-1; i++)
        {
            printf("X ");
        }
        printf("X/");
    }
    bool Turn(int Player, int Vert, int Gor)
    {
        if(f[Vert-1][Gor-1]==0)
        {
            f[Vert-1][Gor-1]=Player;
            return true;
        }
        return false;
    }
    int IsVictory()
    {
        bool IsChanges=false;
        for(int i=0; i<size; i++)
        {
            for(int j=0; j<size; j++)
                if(f[i][j]==0)
                {
                    IsChanges=true;
                    break;
                }
                if(IsChanges==true)
                    break;
        }
        if(IsChanges==false)
            return 3;
        bool* *tmp=new bool*[size];
        for(int i=0; i<size; i++)
        {
            tmp[i]=new bool[size];
            for(int j=0; j<size; j++)
                tmp[i][j]=false;
        }
        for(int i=0; i<size; i++)
            if(f[0][i]==1)
                tmp[0][i]=true;
        IsChanges=false;
        for(int i=0; i<size*size; i++)
        {
            IsChanges=false;
            for(int j=1; j<size; j++)
            {
                for(int k=0; k<size; k++)
                {
                    if((f[j][k]==1)&&((tmp[j-1][k]==true)||((k>0)&&(tmp[j][k-1]==true))||((k<size-1)&&(tmp[j][k+1]==true))||((j<size-1)&&(tmp[j+1][k]==true))))
                    {
                        tmp[j][k]=true;
                        IsChanges=true;
                    }
                }
            }
            if(IsChanges==false)
                break;
        }
        IsChanges=false;
        for(int i=0; i<size; i++)
            if(tmp[size-1][i]==true)
            {
                IsChanges=true;
                break;
            }
            if(IsChanges==true)
                return 1;
            for(int i=0; i<size; i++)
                for(int j=0; j<size; j++)
                    tmp[i][j]=false;
            for(int i=0; i<size; i++)
                if(f[i][0]==2)
                    tmp[i][0]=true;
            for(int i=0; i<size*size; i++)
            {
                IsChanges=false;
                for(int j=1; j<size; j++)
                {
                    for(int k=0; k<size; k++)
                    {
                        if((f[k][j]==2)&&((tmp[k][j-1]==true)||((k>0)&&(tmp[k-1][j]==true))||((k<size-1)&&(tmp[k+1][j]==true))||((j<size-1)&&(tmp[k][j+1]==true))))
                        {
                            tmp[k][j]=true;
                            IsChanges=true;
                        }
                    }
                }
                if(IsChanges==false)
                    break;
            }
            IsChanges=false;
            for(int i=0; i<size; i++)
                if(tmp[i][size-1]==true)
                {
                    IsChanges=true;
                    break;
                }
                if(IsChanges==true)
                    return 2;
                return 0;
    }
    ~Field()
    {
        delete f;
    }
};
int main()
{
    printf("Input size of gaming field\n");
    int size;
    scanf("%d",&size);
    Field q(size);
    while(q.IsVictory()==0)
    {
        int Pl=q.CheckTurn()+1;
        printf("Player %d\n\n",Pl);
        q.DrawF();
        printf("\n");
        printf("Input vertical and gorizontal coordinates\n");
        int vert=0;
        int gor=0;
        while((vert<1)||(vert>size)||(gor<1)||(gor>size)||(!q.Turn(Pl,vert,gor)))
        {
            scanf("%d%d",&vert,&gor);
        }
        printf("\n");
        q.DrawF();
        printf("-------------------------\n");
    }
    if(q.IsVictory()==1)
        printf("1-ST PLAYER WINS!\n");
    else if(q.IsVictory()==2)
        printf("2-ND PLAYER WINS!\n");
    else
        printf("DRAW\n");
    getch();
    return 0;
}
1
05.05.2015, 19:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2015, 19:05
Помогаю со студенческими работами здесь

Как написать игру на Java (для PC)?
Как создать игру на java? я вполне умею писать на джава, но насчет о создании игры затрудняюсь....

Как написать игру на quick basic ?
Привет всем=)я начинающий программист,пока учусь на бэйсике=)подскажите пожалуйста,как написать...

Как лучше написать игру Поддавки ?
Имеется ввиду какой контейнер использовать, какую эффективную логику использовать для игры, как...

Как написать сетевую игру TcpListener TcpClient
Делаю курсовую, нужно написать сетевую игру BomberMan. Дело в том что у меня мало опыта работы с...

Как написать игру Магический квадрат на Паскаль
Как написать игру Магический квадрат на Паскаль (В виде игры именно так,что бы пользователь вводил...

Как написать игру для консоли винды ?
Здравствуй народ!!!!!!!!!! Учу С# использую среду visual 2013 хочу сделать игру типа пинг понга не...

Как на делфи написать игру типа платформера?
Платформер типа марио- подобных игр. Какие переменные для хода игры лучше выбрать? Класс, запись,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru