Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Equisto
0 / 0 / 0
Регистрация: 15.11.2018
Сообщений: 8
1

Сыграем в крестики-нолики?

14.12.2018, 18:42. Просмотров 825. Ответов 3
Метки нет (Все метки)

#include <stdio.h>
#include <stdlib.h>


int main()
{
char r;
int t1, t2;
int c1;
int i;
printf("Well, let's play tic-tac-toe, you will play 1 and computer will play 0\nEmpty field will be indicated by x\n");
printf("The first move is yours, so... Let's play? (y/n) ");
scanf("%s", &r);
if(r == 'n')
printf("Ohh... You don't want to play. Okey, goodbye.");
printf("Some rules:\nTop left corner is (1)\nTop middle is (2)\nTop right corner is (3)\nLeft center is (4)\nCenter is (5)\nRight
center is (6)\nLower left corner is(7)\nLower middle is (8)\nLower right corner is (9).\n");
printf("Let's go. How do you go? (1/2/3/4/5/6/7/8/9) ");
scanf("%d", &t1);
if (t1 == 1)
{
printf("You have chosen top left corner. We see this picture: \n");
printf(" 1 x x\n");
printf(" x x x\n");
printf(" x x x\n");
printf("Computer's turn. Computer have chosen center (5). We see this picture: \n");
printf(" 1 x x\n");
printf(" x 0 x\n");
printf(" x x x\n");
printf("Your turn. How do you go? ");
printf("%d", &t2);
if(t2 == 2)
{
printf("You have chosen top middle. We see this picture: \n");
printf(" 1 1 x\n");
printf(" x 0 x\n");
printf(" x x x\n");
}
if(t2 == 3)
{
printf("You have chosen top right corner. We see this picture: \n");
printf(" 1 x 1\n");
printf(" x 0 x\n");
printf(" x x x\n");
}
if(t2 == 4)
{
printf("You have chosen left center. We see this picture: \n");
printf(" 1 x x\n");
printf(" 1 0 x\n");
printf(" x x x\n");
}
if(t2 == 6)
{
printf("You have chosen right center. We see this picture: \n");
printf(" 1 x x\n");
printf(" x 0 1\n");
printf(" x x x\n");
}
if(t2 == 7)
{
printf("You have chosen lower left corner. We see this picture: \n");
printf(" 1 x x\n");
printf(" x 0 x\n");
printf(" 1 x x\n");
}
if(t2 == 8)
{
printf("You have chosen lower middle. We see this picture: \n");
printf(" 1 x x\n");
printf(" x 0 x\n");
printf(" x 1 x\n");
}
if(t2 == 9)
{
printf("You have chosen lower right corner. We see this picture: \n");
printf(" 1 x x\n");
printf(" x 0 x\n");
printf(" x x 1\n");
}
}
else if (t1 == 2)
{
printf("You have chosen top middle. We see this picture: \n");
printf(" x 1 x\n");
printf(" x x x\n");
printf(" x x x\n");
}
else if (t1 == 3)
{
printf("You have chosen top right corner. We see this picture: \n");
printf(" x x 1\n");
printf(" x x x\n");
printf(" x x x\n");
}
else if (t1 == 4)
{
printf("You have chosen left center. We see this picture: \n");
printf(" x x x\n");
printf(" 1 x x\n");
printf(" x x x\n");
}
else if (t1 == 5)
{
printf("You have chosen center. We see this picture: \n");
printf(" x x x\n");
printf(" x 1 x\n");
printf(" x x x\n");
}
else if (t1 == 6)
{
printf("You have chosen right center. We see this picture: \n");
printf(" x x x\n");
printf(" x x 1\n");
printf(" x x x\n");
}
else if (t1 == 7)
{
printf("You have chosen lower left corner. We see this picture: \n");
printf(" x x x\n");
printf(" x x x\n");
printf(" 1 x x\n");
}
else if (t1 == 8)
{
printf("You have chosen lower middle. We see this picture: \n");
printf(" x x x\n");
printf(" x x x\n");
printf(" x 1 x\n");
}
else if (t1 == 9)
{
printf("You have chosen lower right corner. We see this picture: \n");
printf(" x x x\n");
printf(" x x x\n");
printf(" x x 1\n");
}
return 0;
}




Вы и сами понимаете, что если я так продолжу, то код будет размером с Эверест. Не судите строго, просто я никак не могу понять: как сделать это игру проще? (по коду). Защиту от дурака можно опустить. Опять же: это просто "набросок". Вложил, что выводится.
0
Миниатюры
Сыграем в крестики-нолики?  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2018, 18:42
Ответы с готовыми решениями:

Нечестные крестики-нолики
Суть в том, что при игре всё время ходят или &quot;нолики&quot; или &quot;крестики&quot;. Хотя в ходе &quot;разработки&quot; всё...

Крестики-нолики: критика кода
В качестве практики, написал консольные крестики-нолики. Хотелось бы услышать мнение опытных людей....

Крестики-нолики неверный листинг
Привет форум)Как бренный смертный ничего не понимающий в программировании я решил обратится к вам...

Крестики-нолики - найти ошибку
Крестики - нолики. Поле 3х3. Играют два игрока. Первый крестиками,второй ноликами.Ходы задаются...

Прошу критики кода, крестики-нолики
Всем привет. Только начал изучать язык программирования Си, да и программирование в общем. Есть...

3
D3m1an
173 / 137 / 66
Регистрация: 11.08.2016
Сообщений: 472
Завершенные тесты: 1
14.12.2018, 19:21 2
Лучший ответ Сообщение было отмечено Equisto как решение

Решение

Не по теме:

Equisto, оберните пожалуйста ваш код в теги, нажатием на кнопочку "С" . Не читабельно иначе выходит ...



Добавлено через 27 минут
Equisto, вот вариант вывода и ввода короче .
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
#include <stdio.h>
#include <stdlib.h>
 
#define YS  3
#define XS  3
 
char area[][3] = {
        "xxx",
        "xxx",
        "xxx"
    };
 
void step(int choise);
void printArea(void);
 
int main() 
{
char r;
int t1, t2;
int c1;
int i;
printf("Well, let's play tic-tac-toe, you will play 1 and computer will play 0\nEmpty field will be indicated by x\n");
printf("The first move is yours, so... Let's play? (y/n) ");
scanf("%s", &r);
if(r == 'n')
printf("Ohh... You don't want to play. Okey, goodbye.");
printf("Some rules:\nTop left corner is (1)\nTop middle is (2)\nTop right corner is (3)\nLeft center is (4)\nCenter is (5)\nRight center is (6)\nLower left corner is(7)\nLower middle is (8)\nLower right corner is (9).\n");
printf("Let's go. How do you go? (1/2/3/4/5/6/7/8/9) ");
scanf("%d", &t1);
    step(t1);
    printArea();
return 0;
}
 
 
 
void step(int choise)
{
    choise--;
    int x = choise % 3,
        y = choise / 3;
    area[y][x] = '1';
}
 
void printArea(void)
{
    for(int y = 0; y < YS; y++)
    {
        for(int x = 0; x < XS;x++)
        {
            printf("%c ", area[y][x]);
        }
        printf("\n");
    }
}
1
Equisto
0 / 0 / 0
Регистрация: 15.11.2018
Сообщений: 8
14.12.2018, 19:30  [ТС] 3
Ой, совсем забыл
Сделаю новую тему

Добавлено через 1 минуту
Спасибо, сейчас попробую

Добавлено через 6 минут
Большое спасибо, все работает!
Только вот есть вопрос: что в вашем коде означают "строки":
#define YS 3
#define XS 3
0
D3m1an
173 / 137 / 66
Регистрация: 11.08.2016
Сообщений: 472
Завершенные тесты: 1
14.12.2018, 19:42 4
Equisto, пожалуйста.
Это макросы , размер поля по x и y. Подставляются препроцессором значения записанные после имени макроса. В ходе работы программы используются уже исключительно их значения.
Участвуют в работе функции printArea(). Можно было бы и без них обойтись.
1
14.12.2018, 19:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2018, 19:42

Игровое поле для крестики-нолики
Помогите сделать игровое поле , к которому удобно будет обращаться в игре &quot;Крестики-нолики&quot;. А так...

Написать самые простые крестики-нолики
Задание по непрофильному предмету... Игра &quot;крестики-нолики&quot; должна соответствовать 5 пунктам:...

Игра крестики-нолики - пояснить фрагмент программы
Можете объяснить, что происходит в этом фрагменте программы: if...


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

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

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