Сделай Сам Свою Работу на 5

Результат работы программы





В результате при нажатии клавиши «Начать игру» во всплывающем окне открывается основное поле игры. Фигура начинает падать. С помощью соответствующих клавиш управления фигура меняет направление, при заполнении игрового поля всплывает окно «Конец игры» , ведётся счёт.

На рисунке 3 представлен результат работы программы.

Рисунок 3 – результат программы.

 


Руководство пользователя

Запуск программы

Запуск программы осуществляется открытием файла Tetris.exe.

Работа с программой

При запуске приложения появляется окно программы (рисунок 4).

Рисунок 4– дополнительное окно программы

Для начала работы программы необходимо сделать клик левой клавиши мыши по кнопке «Меню игры» и нажать «Начать игру» , после чего появится основное окно игры. Далее вы управляете фигурами с помощью клавиш управления.

- Нажмите клавишу UP для поворот фигуры.

- Нажмите клавишу LEFT для перемещение фигуры влево.

- Нажмите клавишу RIGHT для перемещение фигуры вправо.

- Нажмите клавишу DOWN для перемещение фигуры вниз.


1.

ПРИЛОЖЕНИЕ 1

Листинг файла Form1.cs

namespace Tetris

{

public partial class Form1 : Form



{

private Igrovoe_pole Igrovoe_pole;

private Igrovoe_pole Next;

 

private Label Pkt, Level;

private Label lblPkt, lblPoziom;

private Label info;

 

public int level;

public int punkty;

public double S;

private bool Fast;

private bool gra;

private bool pauza;

 

public Form1()

{

InitializeComponent();

Inicjuj();

}

 

private void Inicjuj()

{

level = 1;

punkty = 0;

gra = false;

pauza = false;

 

Timer.Interval = 1000;

Fast = false;

// Игровое поле

this.Igrovoe_pole = NEW Igrovoe_pole(10, 18);

this.Next = NEW Igrovoe_pole(9, 4);

this.Igrovoe_pole.Location = NEW System.Drawing.Point(15, 15);

this.Igrovoe_pole.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;

this.Igrovoe_pole.Name = "Igrovoe pole";

this.Igrovoe_pole.TabIndex = 0;

this.Igrovoe_pole.Paint += NEW PaintEventHandler(this.Plansza_Paint);

this.Next.Location = NEW System.Drawing.Point(180, 15);

this.Next.Name = "Next";

this.Next.TabIndex = 0;

this.Next.Paint += NEW PaintEventHandler(this.Plansza_Paint);

this.Controls.Add(this.Next);

this.Controls.Add(this.Igrovoe_pole);

this.lblPkt = NEW Label();

this.lblPoziom = NEW Label();

this.Pkt = NEW Label();

this.Level = NEW Label();

this.info = NEW Label();

this.lblPkt.AutoSize = true;

this.lblPkt.Location = NEW System.Drawing.Point(180, 120);

this.lblPkt.Name = "lblPkt";

this.lblPkt.Size = NEW System.Drawing.Size(35, 13);

this.lblPkt.TabIndex = 0;

this.lblPkt.Text = "Очки:";

this.lblPoziom.AutoSize = true;

this.lblPoziom.Location = NEW System.Drawing.Point(180, 100);

this.lblPoziom.Name = "lblPoziom";

this.lblPoziom.Size = NEW System.Drawing.Size(35, 13);



this.lblPoziom.TabIndex = 0;

this.lblPoziom.Text = "Уровень:";

this.Pkt.AutoSize = true;

this.Pkt.Location = NEW System.Drawing.Point(230, 120);

this.Pkt.Name = "Pkt";

this.Pkt.Size = NEW System.Drawing.Size(35, 13);

this.Pkt.TabIndex = 0;

this.Pkt.Text = "0";

this.Level.AutoSize = true;

this.Level.Location = NEW System.Drawing.Point(230, 100);

this.Level.Name = "Level";

this.Level.Size = NEW System.Drawing.Size(35, 13);

this.Level.TabIndex = 0;

this.Level.Text = "1";

this.info.AutoSize = true;

this.info.Location = NEW System.Drawing.Point(180, 140);

this.info.Name = "info";

this.info.Size = NEW System.Drawing.Size(50, 50);

this.info.TabIndex = 0;

this.Controls.Add(this.lblPoziom);

this.Controls.Add(this.lblPkt);

this.Controls.Add(this.Pkt);

this.Controls.Add(this.Level);

this.Controls.Add(this.info);

}

private void timer1_Tick(object sender, EventArgs e)

{

//Правила игры

if (!Igrovoe_pole.wdol())

{

if (Fast)

{

Fast = false;

if (level < 11)

Timer.Interval = 1000 - 100 * (level - 1);

else if (level < 21)

Timer.Interval = 100 - 10 * (level - 1);

else Timer.Interval = 10;

}

int pkt = Igrovoe_pole.linie();

punkty += (pkt * pkt);

Pkt.Text = punkty.ToString();

if (punkty >= level * 10)

{

level++;

Level.Text = level.ToString();

if (level < 11)

Timer.Interval -= 100;

else if (level < 21)

Timer.Interval -= 10;

else Timer.Interval = 10;

}

figura f = Next.getfigura();

if (!Igrovoe_pole.drawfigure(5, 0, f))

{

Timer.Stop();

Timer.Interval = 1000;

MessageBox.Show("Конец игры");

gra = false;

f = null;

Igrovoe_pole.reset();

Next.reset();

level = 1;

punkty = 0;

Pkt.Text = "0";

Level.Text = "1";

return;

}

Next.reset();

Next.drawfigure(0, 0, NEW figura());

}

}

//Запуск игры

private void toolStripMenuItem2_Click(object sender, EventArgs e)

{

gra = true;

Igrovoe_pole.drawfigure(5, 0, NEW figura());

Next.drawfigure(0, 0, NEW figura());

Timer.Start();

}

//Пауза

private void toolStripMenuItem3_Click(object sender, EventArgs e)

{

if (pauza)

{

Timer.Start();

pauza = false;

}

else

{

Timer.Stop();

pauza = true;

}

}

private void toolStripMenuItem4_Click(object sender, EventArgs e)

{

gra = false;

Igrovoe_pole.reset();

Next.reset();

level = 1;

punkty = 0;

Level.Text = "1";

Pkt.Text = "0";

Timer.Stop();

Timer.Interval = 1000;

}

//Управление

protected override void OnKeyDown(KeyEventArgs e)

{

base.OnKeyDown(e);

if (e.KeyCode == Keys.Left && gra && !pauza) Igrovoe_pole.left();



if (e.KeyCode == Keys.Right && gra && !pauza) Igrovoe_pole.right();

if ((e.KeyCode == Keys.Up || e.KeyCode == Keys.Up) && gra && !pauza) Igrovoe_pole.turn_right();

if (e.KeyCode == Keys.Down && gra && !pauza)

{

if (Fast)

{

Timer.Interval = 1000 - 100 * (level - 1);

Fast = false;

}

else if (!Fast)

{

Timer.Interval = 50;

Fast = true;

}

}

}

private void Plansza_Paint(object sender, PaintEventArgs e)

{

Igrovoe_pole p = (Igrovoe_pole)sender;

p.odswiez();

}

}

}

 

Листинг файла Figura.cs

public class figura

{

public enum color { niebieski, yellow, czerwony, biruzoviy, green_1, blue, green, red };

public enum figury { L, J, I, O, T, S, Z };

 

public bool[,] setka;

public figury what;

public Color kolor;

public int kat;

private static Random random = NEW Random();

int g;

//Цвет фигур

public figura()

{

kat = 0;

setka = NEW bool[4, 4];

for (int i = 0; i < 4; i++)

for (int j = 0; j < 4; j++)

setka[i, j] = false;

// Рандом цвета

color nowy_kolor = (color)random.Next(8);

switch (nowy_kolor)

{

case color.niebieski: kolor = Color.LightBlue; break;

case color.yellow: kolor = Color.LemonChiffon; break;

case color.biruzoviy: kolor = Color.BurlyWood; break;

case color.czerwony: kolor = Color.Coral; break;

case color.green_1: kolor = Color.YellowGreen; break;

case color.blue: kolor = Color.Blue; break;

case color.red: kolor = Color.Red; break;

case color.green: kolor = Color.Green; break;

default: kolor = Color.Black; break;

}

// Выпадение фигур

figury NEW_figura = (figury)random.Next(7);

switch (NEW_figura)

{

// J

case figury.J:

setka[1, 0] = setka[1, 1] = setka[1, 2] = setka[0, 2] = true;

what = figury.J;

break;

// L

case figury.L:

setka[0, 0] = setka[0, 1] = setka[0, 2] = setka[1, 2] = true;

what = figury.L;

break;

// S

case figury.S:

setka[0, 0] = setka[0, 1] = setka[1, 1] = setka[1, 2] = true;

what = figury.S;

break;

// O

case figury.O:

setka[0, 0] = setka[1, 0] = setka[0, 1] = setka[1, 1] = true;

what = figury.O;

break;

// I

case figury.I:

setka[0, 0] = setka[0, 1] = setka[0, 2] = setka[0, 3] = true;

what = figury.I;

break;

 

// T

case figury.T:

setka[1, 0] = setka[0, 1] = setka[1, 1] = setka[2, 1] = true;

what = figury.T;

break;

// Z

case figury.Z:

setka[1, 0] = setka[1, 1] = setka[0, 1] = setka[0, 2] = true;

what = figury.Z;

break;

}

}

public figura odwrocona(int fi)

{

if (fi != 0 && fi != 90 && fi != 180 && fi != 270) return this;

figura NEW = NEW figura();

NEW.kat = fi;

NEW.kolor = kolor;

NEW.what = what;

for (int i = 0; i < 4; i++)

for (int j = 0; j < 4; j++)

NEW.setka[i, j] = false;

// Вид фигур после поворота

switch (what)

{

case figury.L:

switch (fi)

{

case 0: NEW.setka[0, 0] = NEW.setka[0, 1] = NEW.setka[0, 2] = NEW.setka[1, 2] = true; break;

case 90: NEW.setka[0, 0] = NEW.setka[1, 0] = NEW.setka[2, 0] = NEW.setka[0, 1] = true; break;

case 180: NEW.setka[0, 0] = NEW.setka[1, 0] = NEW.setka[1, 1] = NEW.setka[1, 2] = true; break;

case 270: NEW.setka[2, 0] = NEW.setka[0, 1] = NEW.setka[1, 1] = NEW.setka[2, 1] = true; break;

}

break;

case figury.J:

switch (fi)

{

case 0: NEW.setka[1, 0] = NEW.setka[1, 1] = NEW.setka[1, 2] = NEW.setka[0, 2] = true; break;

case 90: NEW.setka[0, 0] = NEW.setka[0, 1] = NEW.setka[1, 1] = NEW.setka[2, 1] = true; break;

case 180: NEW.setka[0, 0] = NEW.setka[0, 1] = NEW.setka[0, 2] = NEW.setka[1, 0] = true; break;

case 270: NEW.setka[0, 0] = NEW.setka[1, 0] = NEW.setka[2, 0] = NEW.setka[2, 1] = true; break;

}

break;

case figury.I:

switch (fi)

{

case 0:

case 180:

NEW.setka[0, 0] = NEW.setka[0, 1] = NEW.setka[0, 2] = NEW.setka[0, 3] = true; break;

case 90:

case 270:

NEW.setka[0, 0] = NEW.setka[1, 0] = NEW.setka[2, 0] = NEW.setka[3, 0] = true; break;

}

break;

case figury.O:

NEW.setka[0, 0] = NEW.setka[1, 0] = NEW.setka[0, 1] = NEW.setka[1, 1] = true; break;

case figury.T:

switch (fi)

{

case 0: NEW.setka[1, 0] = NEW.setka[0, 1] = NEW.setka[1, 1] = NEW.setka[2, 1] = true; break;

case 90: NEW.setka[0, 0] = NEW.setka[0, 1] = NEW.setka[0, 2] = NEW.setka[1, 1] = true; break;

case 180: NEW.setka[0, 0] = NEW.setka[1, 0] = NEW.setka[2, 0] = NEW.setka[1, 1] = true; break;

case 270: NEW.setka[1, 0] = NEW.setka[1, 1] = NEW.setka[1, 2] = NEW.setka[0, 1] = true; break;

}

break;

case figury.S:

switch (fi)

{

case 0:

case 180:

NEW.setka[0, 0] = NEW.setka[0, 1] = NEW.setka[1, 1] = NEW.setka[1, 2] = true; break;

case 90:

case 270:

NEW.setka[1, 0] = NEW.setka[2, 0] = NEW.setka[0, 1] = NEW.setka[1, 1] = true; break;

}

break;

case figury.Z:

switch (fi)

{

case 0:

case 180:

NEW.setka[1, 0] = NEW.setka[1, 1] = NEW.setka[0, 1] = NEW.setka[0, 2] = true; break;

case 90:

case 270:

NEW.setka[0, 0] = NEW.setka[1, 0] = NEW.setka[1, 1] = NEW.setka[2, 1] = true; break;

}

break;

}

return NEW;

}

}

 

Листинг файла Grid.cs

public class Grid

{

private Rectangle kwadrat;

private Color kolor;

private int x, y;

private bool zajeta;

public const int wymiar = 15;

public Grid()

{

kwadrat = NEW Rectangle(x * wymiar + 2,

y * wymiar + 2,

wymiar - 2,

wymiar - 2);

zajeta = false;

x = y = 0;

kolor = Color.Black;

}

public Grid(int a, int b)

{

x = a;

y = b;

kwadrat = NEW Rectangle(x * wymiar + 2,

y * wymiar + 2,

wymiar - 2,

wymiar - 2);

zajeta = false;

kolor = Color.Black;

}

public Grid(int a, int b, Color k)

{

x = a;

y = b;

kolor = k;

kwadrat = NEW Rectangle(x * wymiar + 2,

y * wymiar + 2,

wymiar - 2,

wymiar - 2);

zajeta = false;

}

public bool czyzajeta()

{

return zajeta;

}

public void setkolor(Color k)

{

kolor = k;

}

public Color getkolor()

{

return kolor;

}

//Обводка

public void rysuj(Graphics g)

{

SolidBrush p = NEW SolidBrush(kolor);

g.FillRectangle(p, kwadrat);

g.DrawRectangle(Pens.Black, kwadrat);

zajeta = true;

}

public void delete(Graphics g, Color k)

{

SolidBrush p = NEW SolidBrush(k);

g.FillRectangle(p, kwadrat);

g.DrawRectangle(NEW Pen(p), kwadrat);

zajeta = false;

}

 

Листинг файла Igrovoe_pole.cs

public class Igrovoe_pole : Infographics

{

private int x_figury, y_figury;

private figura block;

 

public Igrovoe_pole()

{

x_figury = y_figury = 0;

}

public Igrovoe_pole(int a, int b)

: base(a, b)

{

x_figury = y_figury = 0;

}

// Отображение фигуры в окне

public bool drawfigure(int x, int y, figura f)

{

if (!sprawdzwymiary(x, y)) return false;

int i, j;

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

if (f.setka[i, j])

{

if (!sprawdzwymiary(x + i, y + j)) return false;

if (setka[x + i, y + j].czyzajeta()) return false;

}

x_figury = x;

y_figury = y;

if (block != f) block = f;

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

if (f.setka[i, j])

{

setka[x + i, y + j].setkolor(f.kolor);

drawgrid(x + i, y + j);

}

return true;

}

public bool wdol()

{

if (block == null) return false;

int i, j;

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

{

if (block.setka[i, j] && (j == 3 || !block.setka[i, j + 1]))

{

if (!sprawdzwymiary(x_figury + i, y_figury + j + 1)) return false;

if (setka[x_figury + i, y_figury + j + 1].czyzajeta()) return false;

}

}

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

if (block.setka[i, j]) setka[x_figury + i, y_figury + j].delete(g, BackColor);

drawfigure(x_figury, y_figury + 1, block);

return true;

}

public bool left()

{

if (block == null) return false;

int i, j;

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

{

if (block.setka[i, j] && (i == 0 || !block.setka[i - 1, j]))

{

if (!sprawdzwymiary(x_figury + i - 1, y_figury + j)) return false;

if (setka[x_figury + i - 1, y_figury + j].czyzajeta()) return false;

}

}

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

if (block.setka[i, j]) setka[x_figury + i, y_figury + j].delete(g, BackColor);

drawfigure(x_figury - 1, y_figury, block);

return true;

}

public bool right()

{

if (block == null) return false;

int i, j;

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

{

if (block.setka[i, j] && (i == 3 || !block.setka[i + 1, j]))

{

if (!sprawdzwymiary(x_figury + i + 1, y_figury + j)) return false;

if (setka[x_figury + i + 1, y_figury + j].czyzajeta()) return false;

}

}

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

if (block.setka[i, j]) setka[x_figury + i, y_figury + j].delete(g, BackColor);

drawfigure(x_figury + 1, y_figury, block);

return true;

}

public void turn_left()

{

if (block.kat == 0) block.kat = 270;

else block.kat -= 90;

figura NEW = block.odwrocona(block.kat);

int i, j;

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

{

if (NEW.setka[i, j] && !sprawdzwymiary(x_figury + i, y_figury + j)) return;

if (NEW.setka[i, j] &&

!block.setka[i, j] &&

setka[x_figury + i, y_figury + j].czyzajeta())

return;

}

 

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

if (block.setka[i, j]) setka[x_figury + i, y_figury + j].delete(g, BackColor);

drawfigure(x_figury, y_figury, NEW);

}

public void turn_right()

{

if (block.kat == 270) block.kat = 0;

else block.kat += 90;

figura NEW = block.odwrocona(block.kat);

int i, j;

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

{

if (NEW.setka[i, j] && !sprawdzwymiary(x_figury + i, y_figury + j)) return;

if (NEW.setka[i, j] &&

!block.setka[i, j] &&

setka[x_figury + i, y_figury + j].czyzajeta())

return;

}

for (i = 0; i < 4; i++)

for (j = 0; j < 4; j++)

if (block.setka[i, j]) setka[x_figury + i, y_figury + j].delete(g, BackColor);

drawfigure(x_figury, y_figury, NEW);

}

public void wyczysclinie(int n)

{

if (!sprawdzwymiary(1, n)) return;

for (int i = 0; i < sz_ekranu; i++)

setka[i, n].delete(g, BackColor);

}

public void przesunlinie(int n)

{

if (n < 0 || n >= wys_ekranu - 1) return;

int i;

for (i = 0; i < sz_ekranu; i++)

{

if (!setka[i, n].czyzajeta())

{

setka[i, n + 1].delete(g, BackColor);

continue;

}

setka[i, n + 1].setkolor(setka[i, n].getkolor());

setka[i, n + 1].rysuj(g);

setka[i, n].delete(g, BackColor);

}

}

public int linie()

{

int n = wys_ekranu - 1;

int i;

int ile = 0;

bool czylinia = true;

while (n > 0 && ile < 4)

{

for (i = 0; i < sz_ekranu; i++)

if (!setka[i, n].czyzajeta()) czylinia = false;

if (czylinia)

{

ile++;

for (int m = n - 1; m >= 0; m--)

przesunlinie(m);

}

else n--;

czylinia = true;

}

return ile;

}

public figura getfigura()

{

return block;

}

}

Листинг файла Infographics.cs

public class Infographics : Panel

{

protected Graphics g;

protected Grid [,] setka;

protected int sz_ekranu;

protected int wys_ekranu;

public Infographics()

{

sz_ekranu = 10;

wys_ekranu = 10;

this.Size = NEW System.Drawing.Size(sz_ekranu * Grid.wymiar + 4, wys_ekranu * Grid.wymiar + 4);

setka = NEW Grid[sz_ekranu, wys_ekranu];

for (int i = 0; i < sz_ekranu; i++)

for (int j = 0; j < wys_ekranu; j++)

setka[i, j] = NEW Grid(i, j);

g = CreateGraphics();

this.Show();

}

public Infographics(int a, int b)

{

if (a <= 0 || b <= 0) a = b = 10;

sz_ekranu = a;

wys_ekranu = b;

this.Size = NEW System.Drawing.Size(sz_ekranu * Grid.wymiar + 4, wys_ekranu * Grid.wymiar + 4);

setka = NEW Grid[sz_ekranu, wys_ekranu];

for (int i = 0; i < sz_ekranu; i++)

for (int j = 0; j < wys_ekranu; j++)

setka[i, j] = NEW Grid(i, j);

g = CreateGraphics();

this.Show();

}

public bool sprawdzwymiary(int x, int y)

{

if (x < 0 || x >= sz_ekranu || y < 0 || y >= wys_ekranu) return false;

else return true;

}

public bool rysujkratke(int x, int y)

{

if (!sprawdzwymiary(x, y)) return false;

if (setka[x, y].czyzajeta()) return false;

setka[x, y].rysuj(g);

return true;

}

public void odswiez()

{

for (int i = 0; i < sz_ekranu; i++)

for (int j = 0; j < wys_ekranu; j++)

{

if (setka[i, j].czyzajeta())

setka[i, j].rysuj(g);

}

}

public void reset()

{

for (int i = 0; i < sz_ekranu; i++)

for (int j = 0; j < wys_ekranu; j++)

setka[i, j].delete(g, BackColor);

}

}

ПРИЛОЖЕНИЕ 2

 

Блок схема игры "Тетрис"

 

Заключение

Целью работы была разработка графического приложения, моделирующего игру «Тетрис» в среде разработки Microsoft Visual Studio, цель достигнута полностью. В качестве инструмента использовалась Microsoft Visual Studio. Задачи курсовой работы, разработка и тестирование были решены. В ходе работы написана программа, которая моделирует игру «Тетрис». Для решения задачи были изучены основы программирования, а также некоторые новые классы для работы с графикой.


 

Список используемых источников

1. Скит, Дж. C# для профессионалов: тонкости программирования. Справочное пособие / Дж. Скит - 3-е издание, «Вильямс», 2014. — 608с.

2. Троелсен, Эндрю. Язык программирования C# 5.0 и платформа .NET 4.5. Справочное пособие / Троелсен, Эндрю - Издательство «Вильямс», 2013 г.—240с.

3. Албахари, Джозеф; Албахари, Бен Полное описание языка C# 5.0. Справочное пособие [Текст] / Албахари, Джозеф; Албахари, Бен -издательство «Вильямс», 5 издание, 2014 г. - стр.304

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.