Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для SemPaiii
0 / 0 / 1
Регистрация: 04.12.2019
Сообщений: 30

Как реализовать перемещение с клавиатуры в игре Пятнашки?

21.12.2020, 11:59. Показов 904. Ответов 1

Студворк — интернет-сервис помощи студентам
Как реализовать перемещение с клавиатуры в игре "Пятнашки" , работаю в юнити 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
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
public class Puzzle : MonoBehaviour {
 
    public int ID;
    public float distance = 1f;
 
 
    void ReplaceBlocks(int x, int y, int XX, int YY)
    {
        GameControl.grid[x,y].transform.position = GameControl.position[XX,YY];
        GameControl.grid[XX,YY] = GameControl.grid[x,y];
        GameControl.grid[x,y] = null;
        GameControl.click++;
        GameControl.GameFinish();
    }
 
    private Vector3 offset;
 
    void OnMouseDown()
    {
 
        offset = gameObject.transform.position -
            Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f));
    }
 
    
 
    void OnKeyDown()
    {
        for(int y = 0; y < 4; y++)
        {
            for(int x = 0; x < 4; x++)
            {
                if(GameControl.grid[x,y])
                {
                    if(GameControl.grid[x,y].GetComponent<Puzzle>().ID == ID)
                    {
                        if(x > 0 && GameControl.grid[x-1,y] == null)
                        {
                            if (Input.GetKeyDown(KeyCode.W))
                            {
                                Debug.Log("Space key was W.");
 
                                ReplaceBlocks(x, y, x - 1, y);
                                return;
                            }
                            //ReplaceBlocks(x,y,x-1,y);
                            //return;
                        }
                        else if(x < 3 && GameControl.grid[x+1,y] == null)
                        {
                            if (Input.GetKeyDown(KeyCode.A))
                            {
                                Debug.Log("Space key was A.");
 
                                ReplaceBlocks(x, y, x + 1, y);
                                return;
                            }
                            //ReplaceBlocks(x,y,x+1,y);
                            //return;
                        }
                    }
                }
                if(GameControl.grid[x,y])
                {
                    if(GameControl.grid[x,y].GetComponent<Puzzle>().ID == ID)
                    {
                        if(y > 0 && GameControl.grid[x,y-1] == null)
                        {
                            if (Input.GetKeyDown(KeyCode.S))
                            {
                                Debug.Log("Space key was S.");
 
                                ReplaceBlocks(x, y, x, y - 1);
                                return;
                            }
                            
                        }
                        else if(y < 3 && GameControl.grid[x,y+1] == null)
                        {
                            if (Input.GetKeyDown(KeyCode.D))
                            {
                                Debug.Log("Space key was D.");
 
                                ReplaceBlocks(x, y, x, y + 1);
                                return;
                            }
                        }
                    }
                }
            }
        }
    }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2020, 11:59
Ответы с готовыми решениями:

Как в игре пятнашки реализовать сдвиг ряда фишек, более одной за рас ?
Всем привет! Сейчас реализована передвижение фишек (UI Button) с помощью метода проверяющего есть ли рядом с фишкой пустое место, если...

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

Игра Пятнашки 3x3: как реализовать интерфейс программы
Привет всем, посоветуйте пожалуйста как реализовать интерфейс программы. Что вывести на форму, чтобы было удобно работать и мб сделать в...

1
 Аватар для zalec
76 / 54 / 22
Регистрация: 03.03.2019
Сообщений: 176
21.12.2020, 15:08
вот так например
Кликните здесь для просмотра всего текста
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Game15 : MonoBehaviour
{
    enum s { right, up,left, down, none}
    s move = s.none;
    Vector2 playZonePos = new Vector2(100,100);
    Vector2 cellSize = new Vector2 (128,128);
    Vector2 playZoneSize = new Vector2(4, 4);
    Vector2 vInc = Vector2.zero;
    int[,] gameArray;
    int noDraw = -1;
    float moveTile = 0;
    Vector2 vMovePos = Vector2.zero;
    void Start()
    {
        gameArray = new int[(int)playZoneSize.x, (int)playZoneSize.y];
        int i = 0;
        for (int iy = 0; iy < gameArray.GetLength(1); iy++)
            for (int ix = 0; ix < gameArray.GetLength(0); ix++)
            {
                gameArray[ix, iy] = i;
                i++;
            }
    }
    void Update()
    {
        if (move == s.none)
        {
            for (int iy = 0; iy < gameArray.GetLength(1); iy++)
                for (int ix = 0; ix < gameArray.GetLength(0); ix++)
                    if (gameArray[ix, iy] == 0) vMovePos = new Vector2(ix, iy);
            if (Input.GetAxis("Horizontal") < 0 && vMovePos.x < gameArray.GetLength(0)-1) { move = s.left; vInc = Vector2.left; }
            if (Input.GetAxis("Horizontal") > 0 && vMovePos.x >0) { move = s.right; vInc = Vector2.right; }
            if (Input.GetAxis("Vertical") < 0 && vMovePos.y > 0) { move = s.up; vInc = Vector2.up; }
            if (Input.GetAxis("Vertical") > 0 && vMovePos.y < gameArray.GetLength(1)-1) { move = s.down; vInc = Vector2.down; }
            if (move != s.none)
            {
                vMovePos += vInc * -1;
                noDraw = gameArray[(int)vMovePos.x, (int)vMovePos.y];
            }
        }
    }
    private void OnGUI()
    {
        for (int iy = 0; iy < gameArray.GetLength(1); iy++)
            for (int ix = 0; ix < gameArray.GetLength(0); ix++)
            {
                float t = gameArray[ix, iy];
                if (t!=0 && t!=noDraw)
                {
                    GUI.Button(new Rect(playZonePos + cellSize * new Vector2(ix, iy), cellSize), t.ToString());
                }
            }
        if(move != s.none)
        {
            Vector2 np = vMovePos * cellSize + playZonePos +   vInc * moveTile;
            GUI.Button(new Rect(np, cellSize), noDraw.ToString());
            moveTile += 1;
            if (moveTile >= cellSize.x)
            {
                moveTile = 0;
                move = s.none;
                gameArray[(int)vMovePos.x, (int)vMovePos.y] = 0;
                vMovePos -= vInc *-1;
                gameArray[(int)vMovePos.x, (int)vMovePos.y] = noDraw;
                noDraw = -1;
            }
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2020, 15:08
Помогаю со студенческими работами здесь

Сохранение игры в игре пятнашки
Помогите пожалуйста реализовать сохранение и загрузку игры через SaveDialog.

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

Не работает рекурсивная проверка поля в игре пятнашки
Привет всем. Написал код игры, но проблемы с проверкой условия рекурсии Даже если два массива равны, оно всё равно входит в условие. А...

Пятнашки, перемещение номера ячейки
в реализации игры пятнашки возникает проблема с перемещением цифры при перемещении пустой ячейки. где моя ошибка? import tkinter as tk...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru