Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 23.12.2020
Сообщений: 5
1

Не могу понять как сделать видимость ограненную,чтоб игрок видел во круг себя всего 8 клеток

28.12.2020, 18:21. Просмотров 2491. Ответов 9
Метки нет (Все метки)

Здравствуйте уважаемые программисты.Не могу понять как сделать видимость ограненную,чтоб игрок видел во круг себя всего 8 клеток,и игрок генерировался в рандомном месте на карте.Помогите пожалуйста,а то не могу понять как это сделать

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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include <cstdlib>
#include <ctime>
int main()
{
    char mas[20][21];
    int i;
    int x = 4, y = 1;
    char key;
    int ox,oy;
 
 
    do
    {
        sprintf(mas[0], "SSSSSSSSSSSSSSSSSSSS");
 
            sprintf(mas[1], "SSSOOSSSSSSSSSSSSSSS");
 
 
            sprintf(mas[2], "SSSSOOOOOSSSOOOSSSSS");
 
 
            sprintf(mas[3], "SSSSSSOSSOOOOOOOSSSS");
 
 
            sprintf(mas[4], "SSSSSSOSSOSSSSOOSSSS");
 
 
            sprintf(mas[5], "SSSSSSOSSOSSSSOOSSSS");
 
 
            sprintf(mas[6], "SSSSSSOSSOSSSSSOSSSS");
 
 
            sprintf(mas[7], "SSSSSSOSSOSSOOOOSSSS");
 
 
 
            sprintf(mas[8], "SSSSSSOOOOOOOSSSSSSS");
 
            sprintf(mas[9], "SSSSSSSSSSSSOSSSSSSS");
 
 
            sprintf(mas[10], "SSSSSSSSSSOOOOOOSSSS");
 
            sprintf(mas[11], "SSSOOOOOSSSOSSSSSSSS");
 
            sprintf(mas[12], "SSSSSSSOSSSOSSSSSSSS");
 
 
            sprintf(mas[13], "SSSSSSSOSSSOSSSSSSSS");
 
 
            sprintf(mas[14], "SSSSSSSOSSSOOOSSSSSS");
 
 
            sprintf(mas[15], "SSSSSSSOSSSSSOSSSSSS");
 
 
            sprintf(mas[16], "SSSSSSSOOOOOOOOOSSSS");
 
            sprintf(mas[17], "SSSSSSSSSSSSSOSSSSSS");
 
 
            sprintf(mas[18], "SSSSSSSSSSSSSOOOSSSS");
 
        sprintf(mas[19], "SSSSSSSSSSSSSSSWSSSS");
        mas[y][x] = '@';
        system("cls");
        for (i = 0; i < 20; i++)
            printf("%s\n", mas[i]);
 
        key = getch();
        ox=x;
        oy=y;
        if (key == 'w')y--;
        if (key == 's')y++;
        if (key == 'a')x--;
        if (key == 'd')x++;
        if (mas[y][x]=='S')
        {
            x=ox;
            y=oy;
        }
        if (mas[y][x]=='W')
        {
            printf("Vi viigrali!\n");
            x=ox;
            y=oy;
 
        }
 
 
    }
    while (key != 'e');
    {
 
    }
 
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.12.2020, 18:21
Ответы с готовыми решениями:

Не могу разобраться с циклами (не могу понять как сделать так чтоб цикл считывал каждый элемент, без массива!)
Натурально число а вводится пользователем.Определить количество не нудевых цифр этого числа . Не...

Видел в плэй маркете игру, если игрок пройдёт уровень хардкорный, то разработчик даст 30$ Может кто видел?
Видел в плэй маркете игру, если игрок пройдёт уровень хардкорный, то разработчик даст 30$ Может кто...

Как сделать, чтоб юзер видел название, а менялось ИД
Здравствуйте. Нужна помощь. У меня есть 3 таблицы см. рисунок. Я создал форму с таблицей, с...

Не могу понять как работает gluPerspective и все с ним связанное Как сделать чтоб куб не деформ. при изменении окна?
#include &lt;GL/glew.h&gt; #include &lt;GLFW/glfw3.h&gt; #pragma comment(lib, &quot;glu32.lib&quot;) #pragma...

9
170 / 130 / 51
Регистрация: 18.07.2017
Сообщений: 682
28.12.2020, 19:43 2
Цитата Сообщение от sfddsfsd Посмотреть сообщение
как сделать видимость ограненную
Самый простой способ создать еще один буфер 20x21 и копировать в него из реальной карты то, что должен видеть игрок. Выводить, соответственно именно этот буфер, а не саму карту.
0
0 / 0 / 0
Регистрация: 23.12.2020
Сообщений: 5
29.12.2020, 21:27  [ТС] 3
assemberist, А как это реализовать?
0
170 / 130 / 51
Регистрация: 18.07.2017
Сообщений: 682
30.12.2020, 13:01 4
Лучший ответ Сообщение было отмечено sfddsfsd как решение

Решение

Цитата Сообщение от sfddsfsd Посмотреть сообщение
А как это реализовать?
Мне лень писать по своему, так что доделаю твой вариант.
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
int main(){
    /* Êàðòà */
    char mas[20][21];
    sprintf(mas[0], "SSSSSSSSSSSSSSSSSSSS");
    sprintf(mas[1], "SSSOOSSSSSSSSSSSSSSS");
    sprintf(mas[2], "SSSSOOOOOSSSOOOSSSSS");
    sprintf(mas[3], "SSSSSSOSSOOOOOOOSSSS");
    sprintf(mas[4], "SSSSSSOSSOSSSSOOSSSS");
    sprintf(mas[5], "SSSSSSOSSOSSSSOOSSSS");
    sprintf(mas[6], "SSSSSSOSSOSSSSSOSSSS");
    sprintf(mas[7], "SSSSSSOSSOSSOOOOSSSS");
    sprintf(mas[8], "SSSSSSOOOOOOOSSSSSSS");
    sprintf(mas[9], "SSSSSSSSSSSSOSSSSSSS");
    sprintf(mas[10], "SSSSSSSSSSOOOOOOSSSS");
    sprintf(mas[11], "SSSOOOOOSSSOSSSSSSSS");
    sprintf(mas[12], "SSSSSSSOSSSOSSSSSSSS");
    sprintf(mas[13], "SSSSSSSOSSSOSSSSSSSS");
    sprintf(mas[14], "SSSSSSSOSSSOOOSSSSSS");
    sprintf(mas[15], "SSSSSSSOSSSSSOSSSSSS");
    sprintf(mas[16], "SSSSSSSOOOOOOOOOSSSS");
    sprintf(mas[17], "SSSSSSSSSSSSSOSSSSSS");
    sprintf(mas[18], "SSSSSSSSSSSSSOOOSSSS");
    sprintf(mas[19], "SSSSSSSSSSSSSSSWSSSS");
 
    /* Êàðòà ñ "òóìàíîì âîéíû" */
    char screen[20][21];
    
    int i, j;
    for(i=0; i<20; i++){
        memset(screen[i], ' ', 20);
        screen[i][20] = '\0';
    }
    
    int x = 4, y = 1;
    char key;
    int ox,oy;
 
    do{
        screen[y][x] = '@';
        system("cls");
        for (i = 0; i < 20; i++)
            printf("%s\n", screen[i]);
 
        key = getch();
        ox=x;
        oy=y;
        if (key == 'w')y--;
        if (key == 's')y++;
        if (key == 'a')x--;
        if (key == 'd')x++;
 
        if (mas[y][x]=='S'){
            x=ox;
            y=oy;
        }
        else{
            for(i=0; i<3; i++) memset(screen[oy + i - 1], ' ', 20);
            for(i=0; i<3; i++)
                for(j=0; j<3; j++)
                    screen[y + i - 1][x + j - 1] = mas[y + i - 1][x + j - 1];
            screen[y][x] = '@';
        }
 
        if (mas[y][x]=='W'){
            printf("Vi viigrali!\n");
            x=ox;
            y=oy;
        }
    }
    while (key != 'e');
}
Добавлено через 1 час 47 минут
Цитата Сообщение от assemberist Посмотреть сообщение
доделаю твой вариант.
Кстати, карту можно и покрасивее рисовать)
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
 
int main(){
    /* Карта */
    char mas[20][21];
    sprintf(mas[0],  "SS┌--┐SSSSSSSSSSSSSS");
    sprintf(mas[1],  "SS|  └---┐S┌---┐SSSS");
    sprintf(mas[2],  "SS└┐     └-┘   └┐SSS");
    sprintf(mas[3],  "SSS└-┐ ┌┐       |SSS");
    sprintf(mas[4],  "SSSSS| || ┌--┐  |SSS");
    sprintf(mas[5],  "SSSSS| || |SS|  |SSS");
    sprintf(mas[6],  "SSSSS| || |┌-┴- |SSS");
    sprintf(mas[7],  "SSSSS| └┘ └┘    |SSS");
    sprintf(mas[8],  "SSSSS|       ┌--┘SSS");
    sprintf(mas[9],  "SSSSS└---┬-- └--┐SSS");
    sprintf(mas[10], "SS┌-----┐|      |SSS");
    sprintf(mas[11], "SS|     |└┐ ┌---┘SSS");
    sprintf(mas[12], "SS└---┐ |S| |SSSSSSS");
    sprintf(mas[13], "SSSSSS| |S| └-┐SSSSS");
    sprintf(mas[14], "SSSSSS| |S|   |SSSSS");
    sprintf(mas[15], "SSSSSS| └-┴-- └-┐SSS");
    sprintf(mas[16], "SSSSSS|         |SSS");
    sprintf(mas[17], "SSSSSS└-----┐ --┤SSS");
    sprintf(mas[18], "SSSSSSSSSSSS|   |SSS");
    sprintf(mas[19], "SSSSSSSSSSSS└-┐W|SSS");
 
    /* Карта с "туманом войны" */
    char screen[20][21];
    
    int i, j;
    for(i=0; i<20; i++){
        memset(screen[i], ' ', 20);
        screen[i][20] = '\0';
    }
    
    int x = 4, y = 1;
    char key;
    int ox,oy;
 
    do{
        screen[y][x] = '@';
        system("cls");
        for (i = 0; i < 20; i++)
            printf("%s\n", screen[i]);
 
        key = getch();
        ox=x;
        oy=y;
        if (key == 'w')y--;
        if (key == 's')y++;
        if (key == 'a')x--;
        if (key == 'd')x++;
 
        switch(mas[y][x]){
            case ' ': 
                for(i=0; i<3; i++) memset(screen[oy + i - 1], ' ', 20);
                for(i=0; i<3; i++)
                    for(j=0; j<3; j++)
                        screen[y + i - 1][x + j - 1] = mas[y + i - 1][x + j - 1];
                screen[y][x] = '@';
                break;
            
            case 'W': 
                printf("Vi viigrali!\n");
                getch();
            
            default:
                x=ox;
                y=oy;
            
        }
    }
    while (key != 'e');
}
1
0 / 0 / 0
Регистрация: 23.12.2020
Сообщений: 5
30.12.2020, 18:52  [ТС] 5
Спасибо огромное,остался один вопрос,как мне сделать чтоб игрок '@' гинерировался в рандомном месте в массиве на ячейке О?этого я тоже понять не могу,буду очень благодарен если Вы поможете !
0
170 / 130 / 51
Регистрация: 18.07.2017
Сообщений: 682
31.12.2020, 09:40 6
Цитата Сообщение от sfddsfsd Посмотреть сообщение
как мне сделать чтоб игрок '@' гинерировался в рандомном месте
Задавать ему координаты с помощью rand().
0
0 / 0 / 0
Регистрация: 23.12.2020
Сообщений: 5
03.01.2021, 16:04  [ТС] 7
Это понятно,но как сделать так чтоб именно он генерировался на значении О?
0
170 / 130 / 51
Регистрация: 18.07.2017
Сообщений: 682
03.01.2021, 21:47 8
Цитата Сообщение от sfddsfsd Посмотреть сообщение
как сделать так чтоб именно он генерировался на значении О?
If-ом проверять не пробовал?
0
0 / 0 / 0
Регистрация: 23.12.2020
Сообщений: 5
06.01.2021, 13:40  [ТС] 9
C
1
2
3
4
5
6
 srand(time(NULL));
 if(mas[y][x]!='S')
        {
            x=rand();
            y=rand();
        }
примерно так?
но оно так не хочет работать
0
170 / 130 / 51
Регистрация: 18.07.2017
Сообщений: 682
06.01.2021, 13:59 10
Цитата Сообщение от sfddsfsd Посмотреть сообщение
но оно так не хочет работать
Так пораскинь мозгами почему.
C
1
2
3
4
5
 srand(time(NULL));
while(mas[y][x] != 'O'){
    x=rand() % 20;
    y=rand() % 20;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.01.2021, 13:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

как сделать так чтоб админ не видел что происxoдит на моем мониторе?
У меня локальная сеть, через который я имею и доступ в интернет, как сделать так чтоб админ не...

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

Как сделать так, чтоб пользователь видел нужное слово в определенном месте, которое посещается всеми пользователями
У меня есть сайт. На нем есть страница ввода имени пользователя, затем он должен при заходе на...

Возможно ли отключить отображение компьютера в локальной сети? Чтобы комп не видел сам себя, а остальных видел
Локалка на десяток компов, пользователи — классическая бухгалтерия. На каждом компе есть...

Как сделать, чтоб программа скопировала себя
Как сделать чтоб программа скапировала себя?

Не могу сделать задачки, пропустил тему щас не могу понять что и как.сделать


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

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

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