hoofdform:
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;
using System.IO;
namespace JensVerlinden_SICT
{
public struct Highscore
{
public string speler;
public int score;
};
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Highscores
public static Highscore[] HighScores = new Highscore[5];
//naam
public static string speler = "Snake";
//zien of spel bezig is
public bool gameBezig = false;
//speelscherm
private SpeelScherm speelScherm = null;
private void btnOption_Click(object sender, EventArgs e)
{
Options option = new Options();
option.ShowDialog(this);
}
private void btnHighscores_Click(object sender, EventArgs e)
{
LoadHighscores();
Highscores highscore = new Highscores();
highscore.ShowDialog(this);
}
//Highscores laden
public static bool LoadHighscores()
{
try
{
XmlDocument xmlHighscores = new XmlDocument();
xmlHighscores.Load("..\\..\\Highscores.xml");
XmlElement root = xmlHighscores.DocumentElement;
for (int i = 0; i < 5; i++)
{
XmlNode node = root.SelectSingleNode("Score[@id='" + i.ToString() + "']");
HighScores[i] = new Highscore();
HighScores[i].speler = node.Attributes["Speler"].Value;
HighScores[i].score = Convert.ToInt32(node.FirstChild.Value);
}
return true;
}
catch (Exception e)
{
Console.WriteLine("ERROR: " + e.Message);
return false;
}
}
//Highscores opslaan
public static bool ScoreOpslagen(int score)
{
try
{
bool update = false;
int vervangen = -1;
for (int i = 4; i >= 0; i--)
{
if (score > HighScores[i].score)
{
update = true;
vervangen = i;
}
}
if (update)
{
//onderliggende Highscores doorschuiven
for (int i = 4; i > vervangen; i--)
{
HighScores[i].speler = HighScores[i - 1].speler;
HighScores[i].score = HighScores[i - 1].score;
}
HighScores[vervangen].speler = Form1.speler;
HighScores[vervangen].score = score;
XmlDocument highscore = new XmlDocument();
highscore.Load("..\\..\\Instellingen\\Highscores.xml");
XmlElement root = highscore.DocumentElement;
XmlNode node = root.SelectSingleNode("Score[@id='" + vervangen.ToString() + "']");
node.FirstChild.Value = score.ToString();
node.Attributes["Speler"].Value = Form1.speler;
highscore.Save("..\\..\\Highscores.xml");
}
return true;
}
catch (Exception e)
{
Console.WriteLine("ERROR: " + e.Message);
return false;
}
}
private void btnClose_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnPlay_Click(object sender, EventArgs e)
{
this.Hide();
SpeelScherm speelscherm = new SpeelScherm();
speelscherm.ShowDialog(this);
this.Close();
gameBezig = true;
}
//Toetsenbord doorsturen
private void MainForm_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
//Als Tetris spel bezig is
if(gameBezig)
{
speelScherm.toetsenbordInpunt( e );
}
}
}
}
speelscherm:
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;
namespace JensVerlinden_SICT
{
public partial class SpeelScherm : Form
{
private bool gameIsBezig = true;
private Slang slang;
private Bollen bol;
private Sterren ster;
private bool onder, boven, links, rechts, verloren, tekenBol, tekenSter;
private int aantalBollen, score, level, aantalBewegingen, testScore, opgegeten;
//toegevoegd
private Graphics g ;
private Graphics screen;
private Bitmap offscreen;
public SpeelScherm()
{
InitializeComponent();
this.Height = 400;
this.Width = 300;
timer.Enabled = this.gameIsBezig;
slang = new Slang();
bol = new Bollen();
ster = new Sterren();
//toegevoegd
offscreen = new Bitmap(250, 250);
g = Graphics.FromImage(offscreen);
screen = PlayArea.CreateGraphics();
rechts = true;
tekenBol = true;
score = 0;
opgegeten = 0;
}
private void SpeelScherm_Load(object sender, EventArgs e)
{
lblSpeler.Text = Form1.speler;
}
//Spel loopt ?
public bool getGameIsBezig()
{
return this.gameIsBezig;
}
//Toetsenbord controle
public void toetsenbordInpunt(System.Windows.Forms.KeyEventArgs key)
{
if (key.KeyCode == Keys.Escape)
{
//spel stoppen
this.gameIsBezig = false;
// doeGameOver();
}
//spel is bezig en er is een figuur dan gaan kijken naar toetsenbord input
if (this.getGameIsBezig() != null)
{
//Bewegingen
switch (key.KeyCode)
{
case Keys.Up: //2x hetzelfde in de if & else lus omdat het anders niet te goei werkte.
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);
}
private void timer_Tick(object sender, EventArgs e)
{
aantalBewegingen++;
if (onder)
{
slang.beweegOnder();
this.Invalidate();
}
if (boven)
{
slang.beweegBoven();
this.Invalidate();
}
if (links)
{
slang.beweegLinks();
this.Invalidate();
}
if (rechts)
{
slang.beweegRechts();
this.Invalidate();
//dit wordt nu getekend, maar eigenlijk zouden de gif en png moeten getekend worden van in slang en bol of ster
g.Clear(Color.White);
g.FillEllipse(new SolidBrush(Color.Red), 50, 50, 10, 10);
}
screen.DrawImage(offscreen, 0, 0); //toegevoegd
if (slang.heeftKop())
{
verloren = true;
}
if (verloren)
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.SoundLocation = "..//..//gameover.wav";
}
if (bol.opSlang(slang))
{
testScore = (35 - aantalBewegingen);
if (testScore <= 0)
{
testScore = 1;
}
score += testScore * level;
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;
}
while (ster.opSlang(slang));
this.Invalidate();
if (tekenSter)
{
aantalBewegingen++;
if (ster.opSlang(slang))
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.SoundLocation = "..//..//cash.wav";
score += (70 - aantalBewegingen) * level;
opgegeten = aantalBollen;
tekenSter = false;
tekenBol = true;
slang.verleng();
aantalBewegingen = 0;
this.Invalidate();
}
if (aantalBewegingen == 41) //= 20 bewegingen en dan verdwijnt de ster en komt er opnieuw een bolletje
{
opgegeten = aantalBollen;
tekenSter = false;
tekenBol = true;
aantalBewegingen = 0;
this.Invalidate();
}
}
}
}
public int getScoren()
{
return score;
}
/* public void setTimer(int timerLeven, int level)
{
timer = new Timer(timerLeven, new TimerHandler());
this.level = level;
}*/
}
}
klasse slang:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Windows.Forms;
namespace JensVerlinden_SICT
{
class Slang
{
private int[] x = { 10, 9, 8, 7 };
private int[] y = { 10, 10, 10, 10 };
private int[] arrayX;
private int[] arrayY;
private int helpX, helpY, helpX2, helpY2;
private int langer;
Image huid = Image.FromFile("..\\..\\huid.png");
Image kopOnder = Image.FromFile("..\\..\\kop_Onder.gif");
Image kopBoven = Image.FromFile("..\\..\\kop_Boven.gif");
Image kopLinks = Image.FromFile("..\\..\\kop_Links.gif");
Image kopRechts = Image.FromFile("..\\..\\kop_Rechts.gif");
private bool onder, boven, links, rechts, verloren;
public Slang()
{
rechts = true;
langer = 4;
}
public void verleng()
{
langer++;
arrayX = new int[langer];
arrayY = new int[langer];
for (int i = 0; i < langer - 1; i++)
{
arrayX[i] = x[i];
arrayY[i] = y[i];
}
if (links)
{
arrayX[langer - 1] = x[langer - 2];
arrayY[langer - 1] = y[langer - 2];
}
if (rechts)
{
arrayX[langer - 1] = x[langer - 2];
arrayY[langer - 1] = y[langer - 2];
}
if (onder)
{
arrayX[langer - 1] = x[langer - 2];
arrayY[langer - 1] = y[langer - 2];
}
if (boven)
{
arrayX[langer - 1] = x[langer - 2];
arrayY[langer - 1] = y[langer - 2];
}
x = new int[langer];
y = new int[langer];
for (int i = 0; i <= langer - 1; i++)
{
x[i] = arrayX[i];
y[i] = arrayY[i];
}
}
public int getX1()
{
helpX = x[0] * 20 + 25;
return helpX;
}
public int getY1()
{
helpY = y[0] * 20 + 45;
return helpY;
}
public int[] getX()
{
return x;
}
public int[] getY()
{
return y;
}
public void beweegLinks()
{
for (int i = langer - 1; i >= 1; i--)
{
x[i] = x[i - 1];
y[i] = y[i - 1];
}
links = true;
rechts = false;
onder = false;
boven = false;
if (x[0] == 0)
{
x[0] = 19; //slang laten bewegen door de muur en langst andere kant er doorkomen.
}
else
x[0]--;
}
public void beweegRechts()
{
for (int i = langer - 1; i >= 1; i--)
{
x[i] = x[i - 1];
y[i] = y[i - 1];
}
rechts = true;
links = false;
onder = false;
boven = false;
if (x[0] == 19)
{
x[0] = 0;
}
else
x[0]++;
}
public void beweegOnder()
{
for (int i = langer - 1; i >= 1; i--)
{
x[i] = x[i - 1];
y[i] = y[i - 1];
}
onder = true;
links = false;
rechts = false;
boven = false;
if (y[0] == 19)
{
y[0] = 0;
}
else
y[0]++;
}
public void beweegBoven()
{
for (int i = langer - 1; i >= 1; i--)
{
x[i] = x[i - 1];
y[i] = y[i - 1];
}
boven = true;
links = false;
rechts = false;
onder = false;
if (y[0] == 0)
{
y[0] = 19;
}
else
y[0]--;
}
public bool heeftKop()
{
for (int i = 1; i < langer - 1; i++)
{
helpX2 = 25 + x[i] * 20;
helpY2 = 45 + y[i] * 20;
if (helpX2 == getX1() && helpY2 == getY1())//kijken of slang gebotst is op slang. Heel het array doorlopen met allé slang delen en kijken of het botst op een deel.
{
verloren = true;
}
}
return verloren;
}
public void teken(PaintEventArgs g)
{
for(int i=langer-1;i>=0;i--)
{
if(i==0)
{
if (boven)
{
//g.DrawImage(kopBoven, x[i] * 20 + 25, y[i] * 20 + 45);
g.Graphics.DrawImage(kopBoven, x[i] * 20 + 25, y[i] * 20 + 45);
}
if (onder)
{
//g.DrawImage(kopOnder, x[i] * 20 + 25, y[i] * 20 + 45);
g.Graphics.DrawImage(kopOnder, x[i] * 20 + 25, y[i] * 20 + 45);
}
if (links)
{
//g.DrawImage(kopLinks, x[i] * 20 + 25, y[i] * 20 + 45);
g.Graphics.DrawImage(kopLinks, x[i] * 20 + 25, y[i] * 20 + 45);
}
if (rechts)
{
//g.DrawImage(kopRechts , x[i] * 20 + 25, y[i] * 20 + 45);
g.Graphics.DrawImage(kopRechts, x[i] * 20 + 25, y[i] * 20 + 45);
}
}
else
{
//g.DrawImage(huid, x[i]*20+25, y[i]*20+45);
g.Graphics.DrawImage(huid, x[i] * 20 + 25, y[i] * 20 + 45);
}
}
}
}
}
klasse bollen:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace JensVerlinden_SICT
{
class Bollen
{
private int x, y, helpX, helpY, helpX2, helpY2;
private bool bolOpSlang;
protected Image bol = Image.FromFile("..\\..\\bol.png");
private int []arrayX;
private int []arrayY;
static Random random = new Random();
public Bollen()
{
helpX = (int)(20 * random.Next()); //random X coordinaat genereren.
helpY = (int)(20 * random.Next()); //random Y coordinaat genereren.
x = 25 + helpX * 20; // x coordinaat met juiste afmetingen voor botsing te detecteren.
y = 45 + helpY * 20; // y coordinaat met juiste afmetingen voor botsing te detecteren.
}
public void teken(PaintEventArgs g)
{
g.Graphics.DrawImage(bol, x, y);
}
public bool opSlang (Slang s)
{
arrayX = s.getX();
arrayY = s.getY();
bolOpSlang = false;
for (int i = 1; i < arrayX.Length; i++)
{
helpX2 = 25 + arrayX[i] * 20;
helpY2 = 45 + arrayY[i] * 20;
if (x == helpX2 && y == helpY2)
{
bolOpSlang = true;
}
}
return bolOpSlang;
}
}
}
klasse sterren:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Windows.Forms;
namespace JensVerlinden_SICT
{
class Sterren
{
private int x, y, helpX, helpY, helpX2, helpY2;
private bool sterOpSlang;
protected Image ster = Image.FromFile("..\\..\\ster.png");
private int []arrayX;
private int []arrayY;
static Random random = new Random();
public Sterren()
{
helpX = (int)(20D * random.Next()); //random X coordinaat genereren.
helpY = (int)(20D * random.Next()); //random Y coordinaat genereren.
x = 25 + helpX * 20; // x coordinaat met juiste afmetingen voor botsing te detecteren.
y = 45 + helpY * 20; // y coordinaat met juiste afmetingen voor botsing te detecteren.
}
public void teken(PaintEventArgs g)
{
g.Graphics.DrawImage(ster, x, y);
}
public bool opSlang (Slang s)
{
arrayX = s.getX();
arrayY = s.getY();
sterOpSlang = false;
for (int i = 1; i < arrayX.Length; i++)
{
helpX2 = 25 + arrayX[i] * 20;
helpY2 = 45 + arrayY[i] * 20;
if (x == helpX2 && y == helpY2)
{
sterOpSlang = true;
}
}
return sterOpSlang;
}
}
}
bollenlijst:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace JensVerlinden_SICT
{
class BollenLijst
{
private ArrayList bollen;
public BollenLijst()
{
bollen = new ArrayList();
}
public void voegToe(Bollen b)
{
bollen.Add(b);
}
}
}
sterrenlijst:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace JensVerlinden_SICT
{
class SterrenLijst
{
private ArrayList sterren;
public SterrenLijst()
{
sterren = new ArrayList();
}
public void voegToe(Sterren st)
{
sterren.Add(st);
}
}
}
highscore 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;
namespace JensVerlinden_SICT
{
public partial class Highscores : Form
{
public Highscores()
{
InitializeComponent();
}
private void Highscores_Load(object sender, EventArgs e)
{
//HighScores
showHighscores();
}
//Highscores weergeven (XML bestand)
public void showHighscores()
{
lblSpeler1.Text = Form1.HighScores[0].speler;
lblSpeler2.Text = Form1.HighScores[1].speler;
lblSpeler3.Text = Form1.HighScores[2].speler;
lblSpeler4.Text = Form1.HighScores[3].speler;
lblSpeler5.Text = Form1.HighScores[4].speler;
lblScore1.Text = Form1.HighScores[0].score.ToString();
lblScore2.Text = Form1.HighScores[1].score.ToString();
lblScore3.Text = Form1.HighScores[2].score.ToString();
lblScore4.Text = Form1.HighScores[3].score.ToString();
lblScore5.Text = Form1.HighScores[4].score.ToString();
}
}
}
optie 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;
namespace JensVerlinden_SICT
{
public partial class Options : Form
{
public Options()
{
InitializeComponent();
}
private void Options_Load(object sender, EventArgs e)
{
//Speler
txtbSpeler.Text = Form1.speler;
}
private void rbtnLevel1_Checked(object sender, EventArgs e)
{
rbtnLevel1.Checked = true;
rbtnLevel2.Checked = false;
rbtnLevel3.Checked = false;
rbtnLevel4.Checked = false;
}
private void rbtnLevel2_Checked(object sender, EventArgs e)
{
rbtnLevel1.Checked = false;
rbtnLevel2.Checked = true;
rbtnLevel3.Checked = false;
rbtnLevel4.Checked = false;
}
private void rbtnLevel3_Checked(object sender, EventArgs e)
{
rbtnLevel1.Checked = false;
rbtnLevel2.Checked = false;
rbtnLevel3.Checked = true;
rbtnLevel4.Checked = false;
}
private void rbtnLevel4_Checked(object sender, EventArgs e)
{
rbtnLevel1.Checked = false;
rbtnLevel2.Checked = false;
rbtnLevel3.Checked = false;
rbtnLevel4.Checked = true;
}
}
}