1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ShiftOS.Engine.WindowManager;
namespace ShiftOS.Main.Apps
{
public partial class Breakout : UserControl
{
bool goLeft = false;
bool goRight = false;
int speed = 5;
float ballX = 5;
float ballY = 5;
int rows = 5;
int col = 8;
public PictureBox[,] blocks;
public Breakout()
{
InitializeComponent();
DrawBlocks();
gameTimer.Start();
ResetToRest();
}
void ResetToRest()
{
ball.Location = new Point((int)Math.Round(this.Width / 2d, 0), (int)Math.Round(this.Height / 2d, 0));
playerPaddle.Location = new Point((int)Math.Round(ClientSize.Width / 2d, 0), playerPaddle.Location.Y);
}
private void Pong_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A && playerPaddle.Left > 0) goLeft = true;
if (e.KeyCode == Keys.D && playerPaddle.Left + playerPaddle.Width < this.Width) goRight = true;
}
private void Pong_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.A) goLeft = false;
if (e.KeyCode == Keys.D) goRight = false;
}
private void gameTimer_Tick(object sender, EventArgs e)
{
ball.Top += (int)ballY;
ball.Left += (int)ballX;
if (ball.Bottom > ClientSize.Height || ball.Top < 0) ballY = -ballY;
if (ball.Right > ClientSize.Width || ball.Left < 0) ballX = -ballX;
if (ball.Bounds.IntersectsWith(playerPaddle.Bounds)) ballY = -ballY;
if (goRight) playerPaddle.Left += 8;
if (goLeft) playerPaddle.Left -= 8;
if (playerPaddle.Left < 1) goLeft = false;
if (playerPaddle.Left + playerPaddle.Width > this.Width) goRight = false;
for (int j = 0; j < rows; j++)
{
for (int i = 0; i < col; i++)
{
if (ball.Bounds.IntersectsWith(blocks[j,i].Bounds) && blocks[j,i].Visible)
{
ballY = -ballY;
blocks[j,i].Visible = false;
}
}
}
if (ball.Top + ball.Height > ClientSize.Height)
{
gameTimer.Stop();
var infoBox = ShiftWM.StartInfoboxSession("Breakout - You Lose! ", "It appears that you have lost the game, meaning\nall codepoints won were lost. Would you\nlike to try again?", InfoboxTemplate.ButtonType.YesNo);
ShiftWM.StartInfoboxSession(null, infoBox.isOK.ToString(), InfoboxTemplate.ButtonType.Ok);
infoBox.btnOpt1.Click += InfoboxYes;
infoBox.btnOpt2.Click += InfoboxYes;
}
}
private void InfoboxYes(object sender, EventArgs e)
{
DrawBlocks();
ResetToRest();
gameTimer.Start();
}
private void InfoboxNo(object sender, EventArgs e)
{
// When user clicks No
}
private void DrawBlocks()
{
int h = 20;
int w = 75;
blocks = new PictureBox[rows, col];
for (int j = 0; j < rows; j++)
{
for (int i = 0; i < col; i++)
{
blocks[j, i] = new PictureBox();
blocks[j, i].Height = h;
blocks[j, i].Width = w;
blocks[j, i].Top = h * j;
blocks[j, i].Left = w * i;
blocks[j, i].Paint += (o, a) =>
{
Rectangle rect = new Rectangle(blocks[j,i].Location.X, blocks[j,i].Location.Y, blocks[j,i].ClientSize.Width, blocks[j,i].ClientSize.Height);
rect.Inflate(1,1); // border thickness
ControlPaint.DrawBorder(a.Graphics, rect, Color.Black, ButtonBorderStyle.Solid);
};
this.Controls.Add(blocks[j, i]);
}
}
}
}
}
|