Kezdőoldal » Számítástechnika » Programozás » Mi a hiba a kóddal? (C#...

Mi a hiba a kóddal? (C# kicsit bonyolult lehet, v agyis nekem az)

Figyelt kérdés

Egy Snake játékon dolgozom. Az elmélet az lenne, hogy míg 1 pixelt arré megy a kukac feje addig a progi lerakjon egy új "lapot" ezáltal törölve a régi helyzetet. De nem rak le új lapot, hanem csak folyamatosan csíkot húz a kígyó.


A kód ez lenne:


using System;

using System.Windows.Forms;


using System.Collections.Generic;

using System.Collections;


using System.ComponentModel;

using System.Data;

using System.Text;


using System.Drawing;

using System.Drawing.Drawing2D;


namespace Snake

{


public struct SnakePart

{

public Rectangle snakeRec;

public Bitmap snakeBitMap;


public Point middlePoint;


public Point upMiddle;

public Point downMiddle;

public Point leftMiddle;

public Point rightMiddle;


public Point turnPoint;


public Point Direction;

}

public partial class Form1 : Form

{

Bitmap myBitmap;

Bitmap originalBitmap;


Graphics g;

Bitmap SnakeHead;

//Point pont = new Point(150, 150);


int min = 0;

int max = 341;


int Counter = 0;


Random X = new Random();


Point celpont = new Point(20, 20);

Point currentDir = new Point();

private Keys m_keys;



SnakePart[] snakePart = new SnakePart[30];



public Form1()

{

InitializeComponent();


myBitmap = new Bitmap(this.Width, this.Height);

originalBitmap = new Bitmap(this.Width, this.Height);

SnakeHead = new Bitmap("kukac\\kigyo.png");


Bitmap snakeBitmap = new Bitmap(20, 20);


for (int x = 0; x < this.Width - 1; x++)

for (int y = 0; y < this.Height - 1; y++)

originalBitmap.SetPixel(x, y, Color.Gray);



for(int x = 0; x < 10; x++)

for (int y = 0; y < 10; y++)

snakeBitmap.SetPixel(x, y, Color.Blue);



myBitmap = originalBitmap;



g = Graphics.FromImage(myBitmap);


celpont.X = X.Next(min, max);

celpont.Y = X.Next(min, max);


timer1.Interval = 1;

timer1.Enabled = true;


timer1.Start();


timer1.Tick += new EventHandler(timer1_Tick);


AddSnakePart(new Point(50, 60), new Point(1, 0), SnakeHead, new Point(-1, -1));

//DrawSnakeParts();


}


private void Form1_KeyDown(object sender, KeyEventArgs e)

{

m_keys = e.KeyCode;

}


private void timer1_Tick(object sender, EventArgs e)

{

if (m_keys == Keys.Left)

{

currentDir = new Point(-1, 0);

}

if (m_keys == Keys.Right)

{

currentDir = new Point(1, 0);

}

if (m_keys == Keys.Up)

{

currentDir = new Point(0, -1);

}

if (m_keys == Keys.Down)

{

currentDir = new Point(0, 1);

}


UpdateSnakeParts();

DrawSnakeParts();

}



private void AddSnakePart(Point currentMiddlePoint, Point Direction, Bitmap SnakeBitMap, Point turnPoint)

{

Rectangle currentSnakePart = new Rectangle();


if (Direction == new Point(0, -1))

{

currentSnakePart = new Rectangle(currentMiddlePoint.X - 10, currentMiddlePoint.Y + 10, 20, 20);

}

else if (Direction == new Point(0, 1))//Itt a lefele irányt vizsgáljuk

{

currentSnakePart = new Rectangle(currentMiddlePoint.X - 10, currentMiddlePoint.Y - 10, 20, 20);

}

else if (Direction == new Point(-1, 0))//Itt a balra irányt vizsgáljuk

{

currentSnakePart = new Rectangle(currentMiddlePoint.X + 10, currentMiddlePoint.Y - 10, 20, 20);

}

else if (Direction == new Point(1, 0))//Itt a jobbra irányt vizsgáljuk

{

currentSnakePart = new Rectangle(currentMiddlePoint.X - 10, currentMiddlePoint.Y + 10, 20, 20);

}


snakePart[Counter].snakeRec = currentSnakePart;


snakePart[Counter].middlePoint = new Point(currentSnakePart.Left + currentSnakePart.Width / 2, currentSnakePart.Top + currentSnakePart.Height / 2);


snakePart[Counter].leftMiddle = new Point(snakePart[Counter].middlePoint.X - 10, snakePart[Counter].middlePoint.Y);

snakePart[Counter].upMiddle = new Point(snakePart[Counter].middlePoint.X, snakePart[Counter].middlePoint.Y - 10);

snakePart[Counter].downMiddle = new Point(snakePart[Counter].middlePoint.X, snakePart[Counter].middlePoint.Y + 10);

snakePart[Counter].rightMiddle = new Point(snakePart[Counter].middlePoint.X + 10, snakePart[Counter].middlePoint.Y);


snakePart[Counter].snakeBitMap = SnakeBitMap;


snakePart[Counter].turnPoint = turnPoint;

snakePart[Counter].Direction = Direction;

}


private void DrawSnakeParts()

{

for (int x = 0; x < this.Width - 1; x++)

for (int y = 0; y < this.Height - 1; y++)

{

//myBitmap.SetPixel(x, y, Color.Gray);

}



myBitmap = ClearBitmap(myBitmap); ;


g.DrawImage(snakePart[Counter].snakeBitMap, snakePart[Counter].snakeRec);


pictureBox1.Image = originalBitmap;

}

private void UpdateSnakeParts()

{

snakePart[Counter].Direction = currentDir;


snakePart[Counter].snakeRec.X += currentDir.X;

snakePart[Counter].snakeRec.Y += currentDir.Y;

snakePart[Counter].middlePoint = new Point(snakePart[Counter].snakeRec.Left + snakePart[Counter].snakeRec.Width / 2, snakePart[Counter].snakeRec.Top + snakePart[Counter].snakeRec.Height / 2);

snakePart[Counter].leftMiddle = new Point(snakePart[Counter].middlePoint.X - 10, snakePart[Counter].middlePoint.Y);

snakePart[Counter].upMiddle = new Point(snakePart[Counter].middlePoint.X, snakePart[Counter].middlePoint.Y - 10);

snakePart[Counter].downMiddle = new Point(snakePart[Counter].middlePoint.X, snakePart[Counter].middlePoint.Y + 10);

snakePart[Counter].rightMiddle = new Point(snakePart[Counter].middlePoint.X + 10, snakePart[Counter].middlePoint.Y);


}


private Bitmap ClearBitmap(Bitmap bitmapToClear)

{

bitmapToClear = originalBitmap;


return bitmapToClear;

}

}

}


Nem kellenek alternatív megoldások, persze azokat is köszönöm, ha valaki azzal szeretett volna segíteni, de nekem ennek a kódnak a hibája érdekelne most. Köszönöm előre :)


2011. aug. 22. 23:47
 1/5 anonim válasza:

public Form1()


kb. a forráskód elején van ez

ez után szerintem kell pontosvessző...

a programozásban ilyen hiányosságok is okozhatják a program hibáját...

2011. aug. 23. 12:10
Hasznos számodra ez a válasz?
 2/5 anonim válasza:

valamint még a vége felé


private void DrawSnakeParts()

2011. aug. 23. 12:11
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

Első válaszolónak mondom, hogy oda nem kell pontosvessző az egy metódus, persze azért köszönöm :)

másodiknak mondom, az a sor benne van a progiban, de neked is köszönöm, h igyekszel, viszont így sajna még minnig nincs meg a hiba. :(

2011. aug. 23. 18:55
 4/5 A kérdező kommentje:
bocs látom mind2 t te írtad :P
2011. aug. 23. 19:18
 5/5 anonim válasza:

Erre én csak azt tudom mondani hogy azta k. Va:D

BárcsK fele így programoznék

mióta programozol¿

2012. jan. 31. 22:49
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!