ЗМЕЙКА НА C# WINFORMS/SNAKE C# WINDOWS FORMS APPLICATION

preview_player
Показать описание
Ребята, поддержите канал, подпишитесь ;)
Мы рассмотрим, как написать всем известную мини-игру змейку на C# Windows Forms Application. Все довольно просто, пробуйте.
На вопросы по теме отвечу в комментах)
Рекомендации по теме
Комментарии
Автор

Всем Привет! Позавчера задумался о программировании, вчера забацал "Привет Мир!", сегодня уже тут... скорость повествования в видосе, для меня, сопоставима со скоростью света!!!) Огромное спасибо АВТОРУ за выложенные исходники, уже скачал... теперь буду по буковке, по словечку, по строчке вникать и разбираться... мне 33 года, а радость от открытия всех этих возможностей сопоставима с радостью от первых уроков физики в школе, другими словами ребёнок в душе проснулся) В хорошем смысле))) Всем успехов! И ещё раз огромное спасибо автору за учебный материал.

Rashpak
Автор

Спасибо тебе папаша что сделал видео, по которому я делал проект

NumbDiggers
Автор

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

meetoo
Автор

Господи, спасибо, что даровал в этот мир, этого человека. Делаю курсач по Snake Battle 1992 года, твоё видео, очень помогло бро

Midwich_Hunter
Автор

КОД:
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 WindowsFormsApp2
{
public partial class Form1 : Form
{
private int rI, rJ;
private PictureBox[] snake = new PictureBox[400];
private Label labelScore;
private int score = 0;
private int dirX, dirY;
private int _width = 800;
private int _heighth = 800;
private int _sizeofsides = 40;
private PictureBox fruite;
public Form1()
{
InitializeComponent();
//this._width = _width;
//this._heighth = _heighth;

dirX = 1;
dirY = 0;
snake[0] = new PictureBox();
snake[0].Location = new Point(200, 200);
snake[0].Size = new Size(_sizeofsides, _sizeofsides);
snake[0].BackColor = Color.Blue;
fruite = new PictureBox();
fruite.BackColor = Color.Red;
this.Controls.Add(snake[0]);
fruite.Size = new Size(_sizeofsides, _sizeofsides);
labelScore = new Label();
labelScore.Text = "Score: 0";
labelScore.Location = new Point(810, 10);


_generateMap();
_generateFruit();
timer1.Tick += new EventHandler(_update);
timer1.Interval = 500;
timer1.Start();
this.KeyDown += new KeyEventHandler(OKP);
}

private void _generateFruit()
{
Random r = new Random();
rI = r.Next(0, _width - _sizeofsides);
int tempI = rI % _sizeofsides;
rI -= tempI;
rJ = r.Next(0, _width - _sizeofsides);
int tempJ = rJ % _sizeofsides;
rJ -= tempJ;
fruite.Location = new Point(rI, rJ);
this.Controls.Add(fruite);

}

private void _eatFrute()
{
if (snake[0].Location.X == rI && snake[0].Location.Y == rJ)
{
labelScore.Text = "Score: "+ ++score;
snake[score] = new PictureBox();
snake[score].Location = new Point(snake[score - 1].Location.X + 40 * dirX, snake[score - 1].Location.Y - 40 * dirY);
snake[score].Size = new Size(_sizeofsides, _sizeofsides);
snake[score].BackColor = Color.Blue;

_generateFruit();
}
}

private void _generateMap()
{
for (int i = 0; i<_width / _sizeofsides-2; i++)
{
PictureBox pic = new PictureBox();
pic.BackColor = Color.Black;
pic.Location = new Point(0, _sizeofsides * i);
pic.Size = new Size(_width, 1);
this.Controls.Add(pic);
}
for (int i = 0; i <= _heighth / _sizeofsides; i++)
{
PictureBox pic = new PictureBox();
pic.BackColor = Color.Black;
pic.Location = new Point( _sizeofsides * i, 0);
pic.Size = new Size(1, _width);
this.Controls.Add(pic);
}
}

private void _moveSnake()
{
for (int i = score; i >= 1; i--)
{
snake[i].Location = snake[i - 1].Location;
}
snake[0].Location = new Point(snake[0].Location.X + dirX * _sizeofsides, snake[0].Location.Y + dirY * _sizeofsides);
}

private void _update (object obj, EventArgs eventsArgs)
{
_eatFrute();
_moveSnake();

//cube.Location = new Point(cube.Location.X + dirX*_sizeofsides, cube.Location.Y+ dirY* _sizeofsides);
}

private void OKP(object sender, KeyEventArgs e)
{
switch (e.KeyCode.ToString())
{
case "Right":
dirX =1;
dirY = 0;
break;
case "Left":
dirX = -1;
dirY = 0;
break;
case "Up":
dirY =-1;
dirX = 0;
break;
case "Down":
dirY =1;
dirX = 0;
break;
}
}
}
}

СергейЧерный-бп
Автор

Сделал змейку. И тут несколько ошибок, по первых змейка может двигаться в обратном порядке, и во вторых фрукты могут генерироваться в блоках змейки. А так все норм, молодец)

_Zexid_
Автор

Если у кого-то не работают клавиши, то проверьте в свойствах формы поле KeyPreview. Оно должно быть со значением True, иначе событие нажатия клавиши не будет считано.

burningice
Автор

Спасибо очень классно ). Го ещё 1, игру допустим тетрис ))) удачи

Щебетун-вп
Автор

Молодец мне понравилось, прям залип и сам реализовал со своими фичами.

РинатГазизуллин-йр
Автор

спасибо за твои видео)) парень, я твой фанат

TheKayletter
Автор

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

Кирилл-чио
Автор

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

Александр-чтй
Автор

выдает такую ошибку Form1_Load в актуальном контексте несуществует . Я вижу вы там используете OKP пытался туда поставить OKP вместо Form1_Load но оно все равно выдает ошибку

ВладВорона-ъф
Автор

очень полезное видео и грамотные комментарии, спасибо!))

TheKayletter
Автор

Подскажите пожалуйста, я не понимаю почему фрукт который мы съедаем пропадает . Я предполагал что он не исчезает а перемещается в иное место, но мы же каждый раз генерируем новый . Так от где пропадает фрукт (место в коде) ?

viktornik
Автор

Блин очень круто ... Мне понравилось ... Может ты сделаешь Хромовского динозаврика ? 😑

PRISTOR
Автор

Привет. Я недавно начал изучать с# по этому особо не шарю.
Решил сделать змейку как у тебя.
Все процедуры такие же основном,
но у меня появилась не решаемая для меня задача, по усовершенствовании этой игры.
Хотел сделать процедуру которая не допускает появления фрукта под змейкой и короче через цикл for проверял координаты генерации фрукта с каждой частью змейки.
По началу норм всё было к 15 очку начинались тормоза а на 20 короче проц отлетает на 20% в загруз и программа не реагирует не на что.
Подскажи пожалуйста как можно это реализовать?

Стек-юя
Автор

Здравствуйте, подскажите пожалуйста, добавила button с помощью this.Controls.Add() и теперь не могу управлять змейкой . В чем может быть проблема и как ее устранить?)

mrsb
Автор

Здравствуйте, подскажите пожалуйста, почему у меня Next выделяет как ошибку?

brendycat
Автор

нужна помощь, вроде бы код тот же что и на видео но выбивает ошибку, когда запускаю программу вылетает,
попробовал вставить MessageBox.Show("тут работает"); перед циклом сообщение из MessageBox выскакивало но после цикла нет.
Вот код

private void moveSnake()
{
for (int i = score; i >= 0; i++)
{
snake[i].Location = new Point(snake[i].Location.X + dir_x * sizeOfsidse, snake[i].Location.Y + dir_y * sizeOfsidse);
}
}

ИльяМайструк-шс