toetsenbord probleem is opgelost, maar nu zit ik weer met iets eigenaardig..
Ik werk met bolletjes en sterren en normaal na 4 bolletjes moet er een ster komen (die wordt ook getekend), maar als ik dan de ster wil vangen gaat de slang er gewoon door
.
Als ik dit op 1 zet (dus bolletje dan ster en terug bolletje,..) dan werkt het wel.. Alleen zit soms dan nog met een probleem dat er een ster blijft staan en toch terug een bolletjes getekend wordt..
Kzou misschien denken iets met de timer? Als de ster getekend wordt start er een timer en na zoveel seconde moet de ster verdwijnen.
Het stuk code als ik de eerste if op 1 zet ipv 4 werkt het wel, maar met 4 niet meer..
Code:
if ((aantalBollen - opgegeten) == 4)
do
{
ster = new Sterren();
tekenBol = false;
tekenSter = true;
aantalBewegingen++;
}
while (ster.opSlang(slang));
this.Invalidate();
volledige code van dat form:
Code:
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.Xml;
namespace JensVerlinden_SICT
{
public partial class SpeelScherm : Form
{
private bool gameIsBezig = false;
private Slang slang;
private Bollen bol;
private Sterren ster;
private bool onder, boven, links, rechts, verloren, tekenBol, tekenSter;
private int aantalBollen = 0, score = 0, aantalBewegingen = 0, testScore = 0, opgegeten = 0, level = 0;
private XmlDocument doc;
private Form1 form1 = null;
public SpeelScherm()
{
this.InitializeComponent();
slang = new Slang();
bol = new Bollen();
ster = new Sterren();
rechts = true;
tekenBol = true;
score = 0;
opgegeten = 0;
}
private void SpeelScherm_Load(object sender, EventArgs e)
{
//aanpassingen opslaan in XML
/* XmlElement root = doc.DocumentElement;
XmlNode node = root.SelectSingleNode("Speler");
node.FirstChild.Value = lblSpeler.Text;*/
lblSpeler.Text = Options.spelerNaam;
if (Options.level1)
{
timer.Interval = 1000;
level = 1;
}
if (Options.level2)
{
timer.Interval = 750;
level = 2;
}
if (Options.level3)
{
timer.Interval = 450;
level = 3;
}
if (Options.level4)
{
timer.Interval = 250;
level = 4;
}
}
//Spel loopt ?
public bool getGameIsBezig()
{
return this.gameIsBezig;
}
private void SpeelScherm_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
toetsenbordInpunt(e);
}
//Toetsenbord controle
public void toetsenbordInpunt(System.Windows.Forms.KeyEventArgs key)
{
if (key.KeyCode == Keys.Escape)
{
doeGameOver(score);
}
//spel is bezig dan gaan kijken naar toetsenbord input
if (this.gameIsBezig!=null)
{
//Bewegingen
switch (key.KeyCode)
{
case Keys.Up: //2x hetzelfde in de if & else lus omdat het anders niet te goei werkte (slang blijft stilstaan, reden niet bekend).
if (boven)
{
onder = false;
boven = true;
}
else
{
onder = false;
boven = true;
}
links = false;
rechts = false;
break;
case Keys.Down:
if (onder)
{
boven = false;
onder = true;
}
else
{
boven = false;
onder = true;
}
links = false;
rechts = false;
break;
case Keys.Right:
if (rechts)
{
links = false;
rechts = true;
}
else
{
links = false;
rechts = true;
}
onder = false;
boven = false;
break;
case Keys.Left:
if (links)
{
links = true;
rechts = false;
}
else
{
links = true;
rechts = false;
}
onder = false;
boven = false;
break;
}
}
}
public void paintComponent(PaintEventArgs g)
{
if (tekenBol)
{
bol.teken(g);
}
if (tekenSter)
{
ster.teken(g);
}
slang.teken(g);
}
//voor altijd te herpainten, anders wordt slang niet getekend
protected override void OnPaint(PaintEventArgs e)
{
paintComponent(e);
base.OnPaint(e);
}
private void timer_Tick(object sender, EventArgs e)
{
aantalBewegingen++;
if (onder)
{
slang.beweegOnder();
this.Invalidate(); //refreshen (opnieuw painten)
}
if (boven)
{
slang.beweegBoven();
this.Invalidate();
}
if (links)
{
slang.beweegLinks();
this.Invalidate();
}
if (rechts)
{
slang.beweegRechts();
this.Invalidate();
}
if (slang.heeftKop())
{
verloren = true;
}
if (verloren)
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.SoundLocation = "..//..//gameover.wav";
player.Play();
doeGameOver(score);
}
if (bol.opSlang(slang))
{
testScore = (35 - aantalBewegingen);
if (testScore <= 0)
{
testScore = 1;
}
score += testScore * level;
lblScore.Text = score.ToString();
aantalBollen++;
do
{
bol = new Bollen();
tekenBol = true;
}
while (bol.opSlang(slang));
slang.verleng();
aantalBewegingen = 0;
if ((aantalBollen - opgegeten) == 4)
do
{
ster = new Sterren();
tekenBol = false;
tekenSter = true;
aantalBewegingen++;
}
while (ster.opSlang(slang));
this.Invalidate();
if (tekenSter)
{
sterTimer.Start();
if (ster.opSlang(slang))
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.SoundLocation = "..//..//cash.wav";
player.Play();
score += (70 - aantalBewegingen) * level;
lblScore.Text = score.ToString();
opgegeten = aantalBollen;
tekenSter = false;
tekenBol = true;
slang.verleng();
aantalBewegingen = 0;
this.Invalidate();
}
}
}
}
public int getScoren()
{
return score;
}
private void btnStart_Click(object sender, EventArgs e)
{
gameIsBezig = true;
timer.Enabled = this.gameIsBezig;
}
private void sterTimer_Tick(object sender, EventArgs e)
{
opgegeten = aantalBollen;
tekenSter = false;
tekenBol = true;
aantalBewegingen = 0;
sterTimer.Stop();
sterTimer.Dispose();
sterTimer.Enabled = false;
this.Invalidate();
}
private void doeGameOver(int score)
{
this.gameIsBezig = false;
timer.Enabled = false;
//Score opslaan
Form1.ScoreOpslagen(score);
string tekst = "Verloren! Uw score: " + score + "\n Terug naar beginscherm ?";
if (MessageBox.Show(tekst, "Game Over", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
this.Hide();
form1 = new Form1();
form1.ShowDialog(this);
this.Close();
}
else
{
this.Close();
}
}
}
}
Iemand dat kan helpen?