Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.06.2019
Сообщений: 8

TestCase для игры пятнашки

09.06.2019, 09:11. Показов 2177. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, появилась проблемка с которой не могу разобраться, если вкратце, то пыталась написать Тесты для игры "пятнашки" , но толком ничего не вышло, не могли бы вы подсказать какие тесты можно было бы использовать и как их реализовать?
Примеры кодов самой игры

Пример кода логики игры:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace WindowsFormsApp1
{
    class Game
    {
        int size;
        int[,] map;
        int space_x, space_y;
        static Random rand = new Random();
 
        public Game (int size)
        {
            if (size < 2) size = 2;
            if (size > 5) size = 5;
            this.size = size;
            map = new int [size, size]; 
        }
 
        public void start ()
        {
            for (int x = 0; x < size; x++)
                for (int y = 0; y < size; y++)
                    map[x, y] = coords_posit(x, y) + 1;
            space_x = size - 1;
            space_y = size - 1;
            map[space_x, space_y] = 0;
            
        }
 
        public void shift(int position)
        {
            int x, y;
            posit_coords(position, out x, out y);
            if (Math.Abs(space_x - x) + Math.Abs(space_y - y) != 1)
                return; 
            map[space_x, space_y] = map[x, y];
            map[x, y] = 0;
            space_x = x;
            space_y = y;
        }
 
        public void shift_rand()
        {
            int a = rand.Next(0, 4);
            int x = space_x;
            int y = space_y;
            switch (a)
            {
                case 0: x--; break;
                case 1: x++; break;
                case 2: y--; break;
                case 3: y++; break;
 
            }
            shift(coords_posit(x, y));
        }
 
        public bool check_succes()
        {
            if (!(space_x == size - 1 &&
                  space_y == size - 1))
                return false;
            for (int x = 0; x < size; x++)
                for (int y = 0; y < size; y++)
                    if (!(x == size - 1 && y == size - 1))
                    if (map[x, y] != coords_posit(x, y) + 1)
                        return false;
            return true;
        }
 
 
        public int get_number (int position)
        {
            int x, y;
            posit_coords(position, out x, out y);
            if (x < 0 || x >= size) return 0;
            if (y < 0 || y >= size) return 0;
            return map[x, y];
        }
 
        private int coords_posit (int x, int y)
        {
           
            if (x < 0) x = 0;
            if (x > size - 1) x = size - 1;
            if (y < 0) y = 0;
            if (y > size - 1) y = size - 1;
                    return y * size + x;
        }
 
 
        private void posit_coords (int position, out int x, out int y)
        {
            if (position < 0) position = 0;
            if (position > size * size - 1) position = size * size - 1;
            x = position % size;
            y = position / size;
        }
 
    }
}
Пример кода формы:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    { 
        Game game; 
 
        public Form1()
        {
 
            InitializeComponent();
            game = new Game(4);
        }
 
        private void tableLayoutPanel_Paint(object sender, PaintEventArgs e)
        {
 
        }
 
        private void button15_Click(object sender, EventArgs e)
        {
            int position = Convert.ToInt16(((Button)sender).Tag);
            game.shift(position);
            refresh();
            if (game.check_succes())
            {
                
                timer1.Enabled = false;
                MessageBox.Show(String.Format("you win! Ваше время: " ));
                
            }
            
        }
 
        private Button button(int position)
        {
            switch (position)
            {
                case 0: return button0;
                case 1: return button1;
                case 2: return button2;
                case 3: return button3;
                case 4: return button4;
                case 5: return button5;
                case 6: return button6;
                case 7: return button7;
                case 8: return button8;
                case 9: return button9;
                case 10: return button10;
                case 11: return button11;
                case 12: return button12;
                case 13: return button13;
                case 14: return button14;
                case 15: return button15;
                    default: return null;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
           
        }
 
        public int m, s, ms;
 
        public void timer1_Tick(object sender, EventArgs e)
        {
            ms += 1;
            if (ms == 60)
            {
                ms = 0;
                s += 01;
            }
            if (s == 60)
            {
                s = 0;
                m += 01;
            }
 
            label1.Text = m.ToString() + ":" + s.ToString() + ":" + ms.ToString();
        }
 
        private void button16_Click(object sender, EventArgs e)
        {
            
            start_game();
            m = 0;
            ms = 0;
            s = 0;
            timer1.Enabled = true;
           
        }
 
        private void start_game()
 
        {
            game.start();
            for (int j = 0; j < 2; j++)
                game.shift_rand();
            refresh();
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void refresh()
 
        {
            for (int position = 0; position < 16; position++)
            {
                int nr = game.get_number(position);
                button(position).Text = nr.ToString();
                button(position).Visible = (nr > 0);
            }
        }
 
        private void label1_Click(object sender, EventArgs e)
        {
 
        }
    }
}

Буду очень благодарна за помощь
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.06.2019, 09:11
Ответы с готовыми решениями:

Сформировать массив, представляющий собой поле для игры в «Пятнашки»
Надо сформировать массив, представляющий собой поле для игры в «Пятнашки». Поле является массивом 4x4, в клетках которого располагаются...

Применение алоритма А-стар или Дейкстры для решения задачки игры "Пятнашки"
Игровое поле - двумерный массив, содержащий номера фишек Есть методы перемешать тайлы, булевая проверка на выигрыш, начало новой игры, и...

Не понимаю как реализовать заполнение поля для игры "Пятнашки" не повторяющимися числами случайным образом
Здравствуйте. Помогите пожалуйста написать метод для заполнения поля 5на5 для игры &quot;Пятнашки&quot; числами от 1 до 24 случайным...

4
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
10.06.2019, 02:13
AlinaBelina, вот пример пятнашек, написанный с видео - урока на ютубе.
Несмотря на все мои старания и кучей проверок автора кода на предмет ошибок,я их не избежал.Игра завершается раньше времени с неправильным расположением фишек,а вы говорите : "ТЕСТЫ!!!"

ВЛОЖЕНИЯ :
Вложения
Тип файла: rar GAME_15.rar (51.7 Кб, 9 просмотров)
0
9944 / 2945 / 496
Регистрация: 05.10.2013
Сообщений: 7,998
Записей в блоге: 240
14.06.2019, 23:34
AlinaBelina, нужно чтобы ваш проект был частью решения, то есть при создании проекта вы должны были поставить галочку "Create directory for solution". Тогда вы можете добавить проект с тестами, вот так: "File" -> "Add" -> "New Project...". На панели слева выберите вкладку "Test". Выберите тип проекта "Unit Test Project". С этим проблем нет?
0
9944 / 2945 / 496
Регистрация: 05.10.2013
Сообщений: 7,998
Записей в блоге: 240
14.06.2019, 23:54
Добавлю, возможно, полезную для вас информацию. У Microsoft свой встроенный фреймворк для тестирования, но в интернете больше всего уроков по NUnit. Можете через References добавить в проект с unit-тестами: NUnit-3.11.0-net40.zip. Либо можно поставить NUnit через NuGet. Далее, вы подключаете NUnit.Framework и пишите первый тестовый unit-тест. Его можно запустить через "Test Explorer" ("Test" -> "Windows" -> "Test Explorer")

UnitTest1.cs

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using NUnit.Framework;
 
namespace _15PuzzleForAlinaBelina.UnitTests
{
    [TestFixture]
    public class UnitTest1
    {
        [Test]
        public void TestMethod1()
        {
            int actual = 5;
            int expected = 5;
            Assert.AreEqual(expected, actual);
        }
    }
}
0
9944 / 2945 / 496
Регистрация: 05.10.2013
Сообщений: 7,998
Записей в блоге: 240
15.06.2019, 00:00
Чтобы проект с unit-тестами имел доступ к файлам вашей игры нужно добавить в проект с unit-тестами, через References, проект с игрой. Для этого: правой кнопкой по References в проекте с unit-тестами -> "Add Reference..." -> вкладка Projects -> поставить галочку напротив названия вашего проекта с игрой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2019, 00:00
Помогаю со студенческими работами здесь

Добавить Exception в [TestCase]
Всем доброго времени суток. Вопрос по юнит тестированию. Можно ли в TestCase добавить исключение. И если да, то как...

Баскетбол. Для каждой игры определить словесный результат игры (выигрыш или проигрыш)
В одном массиве записано количество мячей, заброшенных баскетбольной командой в каждом из 15-ти матчей, в другом — количество пропущенных...

Игра пятнашки, как проверить где пустое поле для перемещения соседних кнопок
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

для игры пятнашки
var a=Math.round(Math.random()*5); image = new Array(); image = '1.png' image = '2.png' image = '3.png' image = '4.png' image =...

Таблица рекордов для игры "Пятнашки"
Вот код основной программы &lt;html&gt;&lt;head&gt;&lt;title&gt;Пятнашки&lt;/title&gt; &lt;script&gt; str_vict=&quot;Победа&quot;; function zamen(n) { var n2 ; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru