Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
 Аватар для Reborm
3 / 3 / 1
Регистрация: 10.12.2009
Сообщений: 22

Змейка на С#

10.12.2009, 18:08. Показов 8034. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. В програмировании я новичек. Вобщем есть Д/З написать игру "змейка" (ну все наверно в нее играли, такя ползает, жрет чтот, увеличивается, ускоряется )
начав писать ее я сталкнулса с трудностями.
Не знаю как реализовать пожирание обьектов и увеличение ее на 1н элемент.
вот код.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;
 
namespace WindowsFormsApplication1
{
      public partial class Form1 : Form
    {
        int Y = 0;
        int X = 0;
        double Time = 1000;
        private System.Timers.Timer T;
        private int D = 0;
        private static System.Threading.SynchronizationContext Context;
        private System.Threading.SendOrPostCallback SyncMeth;
        public Form1()
        {
            InitializeComponent();
            T = new System.Timers.Timer(Time);
            T.Elapsed += new ElapsedEventHandler(T_Elapsed);
            SyncMeth = SomeMeth;
            Context = WindowsFormsSynchronizationContext.Current;
            MessageBox.Show("Control = WASD", "1",
            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            T.Start();
         }
        private void SomeMeth(object State)
        {
 
            this.label5.Location = this.label4.Location;
            this.label4.Location = this.label3.Location;
            this.label3.Location = this.label2.Location;
            this.label2.Location = this.label1.Location;
            this.label1.Left = this.label1.Location.X + X;
            this.label1.Top = this.label1.Location.Y + Y;
        }
 
        public void T_Elapsed(object sender, ElapsedEventArgs e)
        {
            D++;
            Context.Send(SyncMeth, null);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
        public void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 'w' | e.KeyChar == 'ц')//если происходит нажатие в вверх:
            {
                X = 0;
                Y = -13;
            }
            else if (e.KeyChar == 'a' | e.KeyChar == 'ф')
            {
                X = -13;
                Y = 0;
            }
            else if (e.KeyChar == 'ы' | e.KeyChar == 's')
            {
                X = 0;
                Y = 13;
            }
            else if (e.KeyChar == 'd' | e.KeyChar == 'в')
            {
                X = 13;
                Y = 0;
            }
            }
 
        }
 
 
        }
Она уже ползает по таймеру и смещается по кнопкам =)
Как я понял данную проблемму можно разрешить экземплярами класса, или массивом. А вот как это программно реализовать я незнаю. И в этом проблема. Помогите кто чем может
Для тех кому интересно, также вкладываю сам проэкт
Вложения
Тип файла: rar Змейка.rar (62.0 Кб, 199 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2009, 18:08
Ответы с готовыми решениями:

Игра "Змейка": чтобы змейка не съедала сама себя
Здравствуйте! Пишу змейку на VB 2010. Не получается составить условие того, что бы змейка не ползла в направлении обратному...

змейка
Хочу написать игру змейка, как на первых телефонах. не могу придумать классы которые, при этом использовать(свои). Помогите...

Змейка
Какие трудности я встречу при попытка написать эту игру? Что вы мне рекомендуете ? Важно написать именно bat.

3
 Аватар для ReliableS
10 / 10 / 4
Регистрация: 07.12.2009
Сообщений: 31
10.12.2009, 18:53
Цитата Сообщение от Reborm Посмотреть сообщение
Не знаю как реализовать пожирание обьектов и увеличение ее на 1н элемент.
Алгоритм:
1. Есть змейка с длиной N, которая перемещается по плоскости.
2. На этой плоскости есть точка с коордиатами X, Y.
3. Если змейка проходит через этут точку, увеличить её "хвост" на 1.

Цитата Сообщение от Reborm Посмотреть сообщение
Она уже ползает по таймеру и смещается по кнопкам =)
Не без ошибок. Если запустить вашу программу и не нажимать кнопки управления (w,a,s,d : ц,ф,ы,в), то змейка сползается в одну точку. Если же теперь дать ей направление - снова растягивается. Думаю это не то, что от вас требуют
0
 Аватар для Reborm
3 / 3 / 1
Регистрация: 10.12.2009
Сообщений: 22
10.12.2009, 20:55  [ТС]
Цитата Сообщение от ReliableS Посмотреть сообщение
Алгоритм:
да алгоритм то я знаю. много их.
а как претворить его в жизнь я хз.
Цитата Сообщение от ReliableS Посмотреть сообщение
Если запустить вашу программу и не нажимать кнопки управления (w,a,s,d : ц,ф,ы,в), то змейка сползается в одну точку.
да так оно и есть. нада добавить еще 1н цикл чтоб по нажатию некой кнопки (например Р =))
таймер запускалса.
C#
1
2
3
4
 if (e.KeyChar == 'p' | e.KeyChar == 'з')
            {
              T.Start();
            }
также еще она не двигается если нажата кнопка Капс лок) но это тож решаеца быстро,
C#
1
if (e.KeyChar == 'w' | e.KeyChar == 'ц' | e.KeyChar == 'W' | e.KeyChar == 'Ц')
Но всеравно спасибо хоть за чтото
0
 Аватар для ReliableS
10 / 10 / 4
Регистрация: 07.12.2009
Сообщений: 31
10.12.2009, 21:07
Цитата Сообщение от Reborm Посмотреть сообщение
но это тож решаеца быстро,
C#
1
if (e.KeyChar == 'w' | e.KeyChar == 'ц' | e.KeyChar == 'W' | e.KeyChar == 'Ц')
Думаю понятнее и красивее будет так:
C#
1
if (e.KeyChar.ToString().ToLower() == "w" | e.KeyChar.ToString().ToLower()  == "ц")
В вашем же случае человек, смотрящий код, может не сразу понять: зачем два лишних сравнения?

Цитата Сообщение от Reborm Посмотреть сообщение
да алгоритм то я знаю. много их.
а как претворить его в жизнь я хз.
Храните каждую точку змейки в стеке (например, динамический массив).
При перемещении змейки: если первая точка (голова) проходит через точку X, Y - добавить одно значение в конец массива.

Это будет выглядить примерно так:
C#
1
2
3
4
5
6
7
8
9
10
11
//будем использовать два одномерных массива
List<int> x;
List<int> y;
 
//...массив уже содержит никие точки. в перемещении:
if((x[0] == X_t) & (y[0] == Y_t))
{
x.Add(<координата x - хвост>);
y.Add(<координата y - хвост>);
}
//и дальше отрисовываем уже новую змейку, которая будет на одну точку длиннее
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2009, 21:07
Помогаю со студенческими работами здесь

Змейка на Си
Здраствуйте, у меня вопрос. Я хочу написать на Си простенькую консольную змейку, но я не знаю 1) Как сделать так чтобы каждые некоторые...

змейка с++
ребят,вот наработки,не могу придумать нормальный алгоритм перемещения змейки,точнее перемещение,когда она будет увеличиваться... ведь ей...

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

Змейка
Решил написать собственный аналог змейки. Создал костяк программы, и у меня возникло три вопроса. 1. Змейка отказывается двигаться...

Змейка
Unit Menu; Interface Uses Crt; Const N_Item = 2; Color = 7; AltColor = 0; L = 25; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru