Yılan (Snake Game) Oyunu — C#

Yılan Oyunu — C#

[code lang=”csharp”]

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;//www.gorselprogramlama.com

using System.Windows.Forms;

using System.Collections;

namespace Snake_Game

{

public partial class frmGame : Form

{

public frmGame()

{

InitializeComponent();

}

#region Snake Properties

PictureBox[] SnakePart = new PictureBox[4]; // Snake number of sections

int LastIndex = 0; // Snake start sections

int HeadIndex = 0; // Snake end sections (the snake’s head)

bool GameStatus = false; // Game start or stop

char SnakeWay = (char)0;

bool SnakeCrashed = false;

private void CreateSnake() // Create new a snake

{

SnakePart = new PictureBox[4];//www.gorselprogramlama.com

for (int i = 0; i < SnakePart.Length; i++)

{

SnakePart[i] = new PictureBox();

SnakePart[i].Width = 15;

SnakePart[i].Height = 15;

SnakePart[i].Top = 0;

SnakePart[i].Left = i * (SnakePart[i].Width+ 1);

SnakePart[i].BackColor = Color.Yellow;

pbGame.Controls.Add(SnakePart[i]);

}

HeadIndex = SnakePart.Length – 1;

}

private void DeleteSnake() // Delete a snake

{

for (int i = 0; i < SnakePart.Length; i++)

{

pbGame.Controls.Remove(SnakePart[i]);

}

}//www.gorselprogramlama.com

private void SnakePartAdd()

{

Array.Resize(ref SnakePart, SnakePart.Length + 1);

SnakePart[SnakePart.Length – 1] = new PictureBox();

SnakePart[SnakePart.Length – 1].Width = 15;

SnakePart[SnakePart.Length – 1].Height = 15;

// Dışarıda oluşsun bir tur tamamlanında otomatik olarak ekleniyormuş 😀

SnakePart[SnakePart.Length – 1].Top = -20; //*

SnakePart[SnakePart.Length – 1].Left = -20; //*

SnakePart[SnakePart.Length – 1].BackColor = Color.Yellow;

pbGame.Controls.Add(SnakePart[SnakePart.Length – 1]);

}

//www.gorselprogramlama.com

private void SnakeCrashControl() // Snake head crash controls func.

{

for (int i = 0; i < SnakePart.Length; i++) // Snake Crashed to tail

{

float mutlakX = Math.Abs((SnakePart[HeadIndex].Left + (SnakePart[HeadIndex].Width / 2)) – (SnakePart[i].Left + (SnakePart[i].Width / 2)));

float mutlakY = Math.Abs((SnakePart[HeadIndex].Top + (SnakePart[HeadIndex].Height / 2)) – (SnakePart[i].Top + (SnakePart[i].Height / 2)));

float farkGenislik = (SnakePart[HeadIndex].Width / 2) + (SnakePart[i].Width / 2);

float farkYukselik = (SnakePart[HeadIndex].Height / 2) + (SnakePart[i].Height / 2);

if ((farkGenislik > mutlakX) && (farkYukselik > mutlakY) && i != HeadIndex)

{

SnakeCrashed = true;

break;

}

}

if (SnakePart[HeadIndex].Left >= pbGame.Width – SnakePart[HeadIndex].Width)

{

SnakeCrashed = true;

}

else if (SnakePart[HeadIndex].Top >= pbGame.Height – SnakePart[HeadIndex].Height)

{

SnakeCrashed = true;

}

else if (SnakePart[HeadIndex].Top <= -1)

{

SnakeCrashed = true;

}

else if (SnakePart[HeadIndex].Left <= -1)

{

SnakeCrashed = true;

}

if (SnakeCrashed)

{

GameStatus = false;

tmrGoSnake.Enabled = false;

MessageBox.Show("Üzgünüm Çarptınız. Oyunu Kaybettiniz. Score : " + Score.ToString(), "Dikkat");

}

}//www.gorselprogramlama.com

int GoLeft = 0, GoTop = 0; // Snake go x and y coordinates

private void SnakeMove(int top, int left)

{

SnakePart[LastIndex].Left = SnakePart[HeadIndex].Left + left;

SnakePart[LastIndex].Top = SnakePart[HeadIndex].Top + top;

if (LastIndex == SnakePart.Length – 1)

{

LastIndex = 0;

HeadIndex = SnakePart.Length – 1;

}

else//www.gorselprogramlama.com

{

LastIndex++;

HeadIndex = LastIndex – 1;

}

}

#endregion

#region Food Properties

Random r = new Random();

PictureBox Food;

int Score = 0;

private void CreateFood()

{

int FoodTop = 16 * r.Next(1, 30);

int FoodLeft = 16 * r.Next(1, 30);

Food = new PictureBox();

Food.Width = 15;

Food.Height = 15;

Food.Left = FoodLeft;

Food.Top = FoodTop;

Food.BackColor = Color.Red;

pbGame.Controls.Add(Food);

}//www.gorselprogramlama.com

bool FoodEat = false;

private void FoodEatControl()

{

float mutlakX = Math.Abs((SnakePart[HeadIndex].Left + (SnakePart[HeadIndex].Width / 2)) – (Food.Left + (Food.Width / 2)));

float mutlakY = Math.Abs((SnakePart[HeadIndex].Top + (SnakePart[HeadIndex].Height / 2)) – (Food.Top + (Food.Height / 2)));

float farkGenislik = (SnakePart[HeadIndex].Width / 2) + (Food.Width / 2);

float farkYukselik = (SnakePart[HeadIndex].Height / 2) + (Food.Height / 2);

if ((farkGenislik > mutlakX) && (farkYukselik > mutlakY))

{

FoodEat = true;

}

if (FoodEat)

{

// New Part adding to snake

SnakePartAdd();

Score += 10;

lblScore.Text = "Score : " + Score.ToString();

DeleteFood();

CreateFood();

FoodEat = false;

}

}

private void DeleteFood()

{

pbGame.Controls.Remove(Food);

}//www.gorselprogramlama.com

#endregion

#region Form Events

private void frmGame_KeyDown(object sender, KeyEventArgs e) // Key Down Events

{

if (GameStatus) // If game start then change a go x and go y

{

if (e.KeyCode == Keys.Right && SnakeWay != ‘L’)

{

GoLeft = 0; GoTop = 0;

GoLeft = 16;

SnakeWay = ‘R’;

}

else if (e.KeyCode == Keys.Left && SnakeWay != ‘R’)

{

GoLeft = 0; GoTop = 0;

GoLeft = -16;

SnakeWay = ‘L’;

}

else if (e.KeyCode == Keys.Up && SnakeWay != ‘D’)

{

GoLeft = 0; GoTop = 0;

GoTop = -16;

SnakeWay = ‘U’;

}

else if (e.KeyCode == Keys.Down && SnakeWay != ‘U’)

{

GoLeft = 0; GoTop = 0;

GoTop = 16;

SnakeWay = ‘D’;

} //www.gorselprogramlama.com

}

}

private void tmrGoSnake_Tick(object sender, EventArgs e)

{

if (GameStatus)

{

SnakeMove(GoTop, GoLeft); // Snake Move

SnakeCrashControl();

FoodEatControl();

}

}

#endregion

#region MenuStrip Events

private void yeniOyunToolStripMenuItem_Click(object sender, EventArgs e) // Start a new game

{

duraklatToolStripMenuItem.Text = "Duraklat";

lblScore.Text = "Score : 0";

Score = 0;

FoodEat = false;

GoLeft = 16; GoTop = 0;

SnakeWay = ‘R’;

SnakeCrashed = false;

GameStatus = true;

LastIndex = 0;

DeleteSnake();

CreateSnake();//www.gorselprogramlama.com

DeleteFood();

CreateFood();

tmrGoSnake.Enabled = true;

}

private void duraklatToolStripMenuItem_Click(object sender, EventArgs e) // Pause – Start a game

{

if (GameStatus || duraklatToolStripMenuItem.Text == "Devam Et") // Game started or text is = "Devam Et" Then

{

if (duraklatToolStripMenuItem.Text == "Duraklat")

{

tmrGoSnake.Enabled = false;

GameStatus = false;

duraklatToolStripMenuItem.Text = "Devam Et";

}

else

{

tmrGoSnake.Enabled = true;

GameStatus = true;

duraklatToolStripMenuItem.Text = "Duraklat";

}

}

}

private void hakkındaToolStripMenuItem_Click(object sender, EventArgs e)

{

frmAbout frmA = new frmAbout();

frmA.ShowDialog();//www.gorselprogramlama.com

}

#endregion

}

}

[/code]

Ümit Demirtaş

Projeyi İNDİR

Yorumlar 7

  • Bir oyun programlamak yada bi oyunla ilgili hile kurmak için hangi programı bilmek lazım

  • ibrahim :
    Csharp işini görebilir.

  • #endregion
    GÖREVİ NEDİR?

  • CANSU TERE :
    belli kodları bir aralığa bölmen ve ayırman lazım olduğunda kullanılır.
    Böyle yapınca kodlar daha düzenli oluyor ve okunması kolay oluyor.
    İşlem olarak herhangi bir görevi yok.

    region mail
    //mail gönderecek kodlar buraya

    endregion region db kayıt işlemleri
    // kayıt yapacak kodlar buraya

    endregion
    ………..

  • Hangi Format da Kaydedersek Çalışır?

  • Bu kodları kendime göre işlemeye çalıştım. Zorluk seviyesi ekledim ve şu şekilde engeller ekledim.

    PictureBox[] barrier1 = new PictureBox[1];
    for (int i = 0; i < barrier1.Length; i++)
    {
    barrier1[i] = new PictureBox();
    barrier1[i].Width = 180;
    barrier1[i].Height = 15;
    barrier1[i].Top = 100;
    barrier1[i].Left = 150+ i *( barrier1[i].Width + 1);
    barrier1[i].BackColor = Color.Black;
    pbGame.Controls.Add(barrier1[i]);

    }

    PictureBox[] barrier2 = new PictureBox[1];
    for (int i = 0; i < barrier2.Length; i++)
    {
    barrier2[i] = new PictureBox();
    barrier2[i].Width = 180;
    barrier2[i].Height = 15;
    barrier2[i].Top = 225;
    barrier2[i].Left = 150 + i * (barrier2[i].Width + 1);
    barrier2[i].BackColor = Color.Black;
    pbGame.Controls.Add(barrier2[i]);

    }

    PictureBox[] barrier3 = new PictureBox[1];
    for (int i = 0; i < barrier3.Length; i++)
    {
    barrier3[i] = new PictureBox();
    barrier3[i].Width = 180;
    barrier3[i].Height = 15;
    barrier3[i].Top = 350;
    barrier3[i].Left = 150 + i * (barrier3[i].Width + 1);
    barrier3[i].BackColor = Color.Black;
    pbGame.Controls.Add(barrier3[i]);

    }

    Bu engellere çarpınca yanması gerekiyor. Bunu nasıl yapabilirim ? SnakeCrashControl() içinde denemediğim şey kalmadı yardımcı olur musunuz ?

  • çok güzel bayıldım

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir