Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 06.12.2011
Сообщений: 22
1

Игра maze

22.03.2013, 10:28. Просмотров 1608. Ответов 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            //ввод 
            int[,] maze = new int[,]
            {
                {1,1,1,1,0,1,1,1,1,1},
                {1,0,1,1,0,1,0,0,0,1},
                {1,0,0,0,0,1,0,1,0,1},
                {1,1,1,1,0,1,0,1,0,1},
                {0,0,0,0,0,1,0,1,0,1},
                {1,1,0,1,1,1,0,1,0,1},
                {1,1,0,0,0,0,0,1,0,1},
                {1,1,1,1,1,1,1,1,0,1},
                {1,0,0,0,0,0,0,0,0,1},
                {1,1,1,1,1,1,0,1,1,1}
            };
            //координаты игрока
            int x = 1, y = 1;
            while (true)
            {
                //рисуем лабиринт
                Console.Clear();
                for (int i = 0; i < maze.GetLength(0); i++)
                {
                    for (int j = 0; j < maze.GetLength(1); j++)
                    {
                        if (maze [i, j] == 0) Console.Write(".");
                        if (maze[i, j] == 1) Console.Write("#");
 
                    }
                    Console.WriteLine();
                 }
                Console.CursorLeft = x;
                Console.CursorTop = y;
                Console.ForegroundColor=ConsoleColor.DarkYellow;
                Console.Write("@");
                Console.BackgroundColor = ConsoleColor.Cyan;
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.BackgroundColor = ConsoleColor.Black;
                
                // обработка ввода
                ConsoleKeyInfo ki = Console.ReadKey(True);
                if (ki.Key == ConsoleKey.Escape) break;
                if (ki.Key == ConsoleKey.LeftArrow && maze[y, x - 1] == 0) x--;
                if (ki.Key == ConsoleKey.RightArrow && maze[y, x + 1] == 0) x++;
                if (ki.Key == ConsoleKey.UpArrow && maze[y-1, x] == 0) y--;
                if (ki.Key == ConsoleKey.DownArrow && maze[y+1, x] == 0) y++;
            }
            
        }
    }
}
Подскажите, как сделать так чтобы при запуске программы, лабиринт был случайным, а не каждый раз одним и тем же.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2013, 10:28
Ответы с готовыми решениями:

Игра Maze labirinth - не вижу начала игры
Добрый вечер! Вопрос скорее по вижуал студио, хотя... // 8.15 sort.cpp : Defines the entry point...

Бюджет 4500 гр. Конфигурация работа в Office, AutoCAD, игра Assassin, онлайн игра World of Tanks
Собираю компьютер для сестры. Основные требования: работа в Microsoft Office, AutoCAD, игра...

Игра в загадки. Загадать загадку. Если ответ верен – поздравить пользователя. Затем сообщить, что игра окончена.
Всем привет! Меня зовут VitoScaletta, совсем недавно начал обучаться JS, но очень тяжело в голову...

Игра в «Одиннадцать предметов», игра Баше.
прошу помощи в создании программы! Разработать программную модель следующей игры двух...

6
535 / 536 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
22.03.2013, 10:43 2
Кликните здесь для просмотра всего текста
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
            //ввод 
            Random rnd = new Random();
            int[,] maze = new int[10, 10];
            for (int i = 0; i < maze.GetLength(0); i++)
                for (int j = 0; j < maze.GetLength(1); j++)
                    maze[i, j] = rnd.Next(0, 2);
                    
 
            //координаты игрока
            int x = 1, y = 1;
            while (true)
            {
                //рисуем лабиринт
                Console.Clear();
                for (int i = 0; i < maze.GetLength(0); i++)
                {
                    for (int j = 0; j < maze.GetLength(1); j++)
                    {
                        if (maze[i, j] == 0) Console.Write(".");
                        if (maze[i, j] == 1) Console.Write("#");
 
                    }
                    Console.WriteLine();
                }
                Console.CursorLeft = x;
                Console.CursorTop = y;
                Console.ForegroundColor = ConsoleColor.DarkYellow;
                Console.Write("@");
                Console.BackgroundColor = ConsoleColor.Cyan;
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.BackgroundColor = ConsoleColor.Black;
 
                //обработка ввода
                ConsoleKeyInfo ki = Console.ReadKey(true);
                if (ki.Key == ConsoleKey.Escape) break;
                if (ki.Key == ConsoleKey.LeftArrow && maze[y, x - 1] == 0) x--;
                if (ki.Key == ConsoleKey.RightArrow && maze[y, x + 1] == 0) x++;
                if (ki.Key == ConsoleKey.UpArrow && maze[y - 1, x] == 0) y--;
                if (ki.Key == ConsoleKey.DownArrow && maze[y + 1, x] == 0) y++;
            }
 
 
        }
    }
}
0
1 / 1 / 0
Регистрация: 06.12.2011
Сообщений: 22
22.03.2013, 10:54  [ТС] 3
Примерно такой результат я и сам получал,а вот как сделать чтобы он играбельный был(
0
535 / 536 / 181
Регистрация: 16.03.2012
Сообщений: 1,160
Записей в блоге: 2
22.03.2013, 10:59 4
В чем проявляется "неиграбельность"?
0
Администратор
Эксперт .NET
8865 / 4249 / 743
Регистрация: 17.04.2012
Сообщений: 9,071
Записей в блоге: 14
22.03.2013, 11:25 5
Цитата Сообщение от buntar Посмотреть сообщение
В чем проявляется "неиграбельность"?
Видимо в том, чтобы лабиринт был проходим. Пройдитесь по нулям в коде TC, есть вход (в первой строке) и выход (в последней).
0
Заблокирован
22.03.2013, 16:05 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
 
namespace ConsoleApplication11
{
    class Program
    {
        static void CreateMap(ref int[,] maze)
        {
            //Для матрицы любого размера
            Random rnd = new Random(DateTime.Now.Millisecond);
            int length = -1;
            var nextPreviousNull = new List<int>();
            var resultPreviousNull = new List<int>();
            int ChisloHodov = 25; //Число одновременных ходов
            int shansTupika = 5; //Шанс тупика
            int DimensionMatrix = maze.GetLength(0);
            for (int i = 0; i < DimensionMatrix; i++)
                for (int j = 0; j < DimensionMatrix; j++)
                    maze[i, j] = 1;
            for (int i = 0; i < DimensionMatrix; i++)
            {
                if (i == 0)
                {
                    maze[i, 1] = 0;
                    resultPreviousNull.Add(1);
                    continue;
                };
                if (i + 1 == DimensionMatrix)
                {
                    maze[i, resultPreviousNull[rnd.Next(0, resultPreviousNull.Count)]] = 0;
                    continue;
                };
                nextPreviousNull.Clear();
                for (int x = 0; x < resultPreviousNull.Count; x++)
                {
                    if (x + 1 != resultPreviousNull.Count && rnd.Next(0, shansTupika) == 0) continue;
                    maze[i, resultPreviousNull[x]] = 0;
                    nextPreviousNull.Add(resultPreviousNull[x]);
                    length = rnd.Next(0, resultPreviousNull[x]);
                    for (int j = resultPreviousNull[x] - 1; length != 0; j--)
                    {
                        if (maze[i - 1, j] != 0)
                        {
                            maze[i, j] = 0;
                            nextPreviousNull.Add(j);
                        }
                        else break;
                        length--;
                    };
                    length = rnd.Next(0, DimensionMatrix - 1 - resultPreviousNull[x]);
                    for (int j = resultPreviousNull[x] + 1; length != 0; j++)
                    {
                        if (maze[i - 1, j] != 0)
                        {
                            maze[i, j] = 0;
                            nextPreviousNull.Add(j);
                        }
                        else break;
                        length--;
                    };
                }
 
                resultPreviousNull.Clear();
                for (int k = 0; k < ChisloHodov; k++)
                    resultPreviousNull.Add(nextPreviousNull[rnd.Next(0, nextPreviousNull.Count)]);
                resultPreviousNull = resultPreviousNull.Distinct().ToList();
                for (int h = 0; h < resultPreviousNull.Count; h++)
                {
                    if (resultPreviousNull.Contains(resultPreviousNull[h] + 1))
                        resultPreviousNull.Remove(resultPreviousNull[h] + 1);
                    if (resultPreviousNull.Contains(resultPreviousNull[h] - 1))
                        resultPreviousNull.Remove(resultPreviousNull[h] - 1);
                };
            }
        }
 
        static void Main(string[] args)
        {
            Console.CursorVisible = false;
 
            //ввод 
            int[,] maze = new int[20, 20]; //любой размер, но может не поместиться в консоль
            CreateMap(ref maze);  //создание карты
 
            //координаты игрока
            int x = 1, y = 1;
            while (true)
            {
                //рисуем лабиринт
                Console.Clear();
                for (int i = 0; i < maze.GetLength(0); i++)
                {
                    for (int j = 0; j < maze.GetLength(1); j++)
                    {
                        if (maze[i, j] == 0) Console.Write(".");
                        if (maze[i, j] == 1) Console.Write("#");
 
                    }
                    Console.WriteLine();
                }
                Console.CursorLeft = x;
                Console.CursorTop = y;
                Console.ForegroundColor = ConsoleColor.DarkYellow;
                Console.Write("@");
                Console.BackgroundColor = ConsoleColor.Cyan;
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.BackgroundColor = ConsoleColor.Black;
 
                // обработка ввода
                ConsoleKeyInfo ki = Console.ReadKey(true);
                if (ki.Key == ConsoleKey.Escape) break;
                if (ki.Key == ConsoleKey.UpArrow && y == 0) continue;
                if (ki.Key == ConsoleKey.DownArrow && y == maze.GetLength(0) - 1)
                {
                    Console.WriteLine(string.Empty);
                    Console.WriteLine("You Wins");
                    Console.ReadKey();
                    break;
                };
                if (ki.Key == ConsoleKey.LeftArrow && maze[y, x - 1] == 0) x--;
                if (ki.Key == ConsoleKey.RightArrow && maze[y, x + 1] == 0) x++;
                if (ki.Key == ConsoleKey.UpArrow && maze[y - 1, x] == 0) y--;
                if (ki.Key == ConsoleKey.DownArrow && maze[y + 1, x] == 0) y++;
            }
        }
    }
}
1
Заблокирован
22.03.2013, 16:12 7
Игра maze


C#
1
 int ChisloHodov = 100; //Число одновременных ходов
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2013, 16:12

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

Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново?
Как сделать так, чтобы при нажатии на кнопку &quot;Новая игра&quot; игра начиналась заново? unit1.cpp void...

Игра Кости, игра с компьютером
Всем привет! Делаю консольную игру Кости. Условия такие: 1) Перед игрой все игроки бросают...

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

Игра слов, игра Scrabble
Задание: Создать программу для решения задачи построения слова из некоторого множества букв (игра...


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

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

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