mirror of
https://github.com/seriocomedy/ShiftOS-C-.git
synced 2025-01-23 17:32:15 +00:00
6b804f03eb
The only bugs are that windows don't show in the center of the screen, and Gecko webbrowsers are not serializing properly to be converted to ShiftUI widgets (you can use the ToWidget() extension method to convert a WinForms control to a ShiftUI widget) Also multiple desktop panels are removed due to some odd bug I can't diagnose. Will add them back in the future. Promise. I loved creating GNOME2 skins.
481 lines
19 KiB
C#
481 lines
19 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using ShiftUI;
|
|
|
|
namespace ShiftOS
|
|
{
|
|
public partial class Pong : Form
|
|
{
|
|
int xVel = 7;
|
|
int yVel = 8;
|
|
int computerspeed = 8;
|
|
int level = 1;
|
|
int secondsleft = 60;
|
|
int casualposition;
|
|
double xveldec = 3.0;
|
|
double yveldec = 3.0;
|
|
double incrementx = 0.4;
|
|
double incrementy = 0.2;
|
|
int levelxspeed = 3;
|
|
int levelyspeed = 3;
|
|
int beatairewardtotal;
|
|
int beataireward = 1;
|
|
int[] levelrewards = new int[50];
|
|
int totalreward;
|
|
int countdown = 3;
|
|
|
|
public Pong()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
private void Pong_Load(object sender, EventArgs e)
|
|
{
|
|
setuplevelrewards();
|
|
|
|
if(API.Upgrades["customgrayshades"] == true && API.Upgrades["multitasking"] == true)
|
|
{
|
|
if(API.Upgrades["shiftnet"] == false)
|
|
{
|
|
tmrstoryline.Start();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Move the paddle according to the mouse position.
|
|
private void pongMain_MouseMove(object sender, ShiftUI.MouseEventArgs e)
|
|
{
|
|
paddleHuman.Location = new Point(paddleHuman.Location.X, (MousePosition.Y - this.Location.Y) - (paddleHuman.Height / 2));
|
|
}
|
|
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void gameTimer_Tick(object sender, EventArgs e)
|
|
{
|
|
if (this.Left < Screen.PrimaryScreen.Bounds.Width)
|
|
{
|
|
if (this.Height != API.CurrentSkin.titlebarheight)
|
|
{
|
|
//Set the computer player to move according to the ball's position.
|
|
if (ball.Location.X > 500 - xVel * 10 && xVel > 0)
|
|
{
|
|
if (ball.Location.Y > paddleComputer.Location.Y + 50)
|
|
{
|
|
paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed);
|
|
}
|
|
if (ball.Location.Y < paddleComputer.Location.Y + 50)
|
|
{
|
|
paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed);
|
|
}
|
|
casualposition = rand.Next(-150, 201);
|
|
}
|
|
else {
|
|
//used to be me.location.y
|
|
if (paddleComputer.Location.Y > this.Size.Height / 2 - paddleComputer.Height + casualposition)
|
|
{
|
|
paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y - computerspeed);
|
|
}
|
|
//used to be me.location.y
|
|
if (paddleComputer.Location.Y < this.Size.Height / 2 - paddleComputer.Height + casualposition)
|
|
{
|
|
paddleComputer.Location = new Point(paddleComputer.Location.X, paddleComputer.Location.Y + computerspeed);
|
|
}
|
|
}
|
|
|
|
//Set Xvel and Yvel speeds from decimal
|
|
if (xVel > 0)
|
|
xVel = (int)Math.Round(xveldec);
|
|
if (xVel < 0)
|
|
xVel = (int)-Math.Round(xveldec);
|
|
if (yVel > 0)
|
|
yVel = (int)Math.Round(yveldec);
|
|
if (yVel < 0)
|
|
yVel = (int)-Math.Round(yveldec);
|
|
|
|
// Move the game ball.
|
|
ball.Location = new Point(ball.Location.X + xVel, ball.Location.Y + yVel);
|
|
|
|
// Check for top wall.
|
|
if (ball.Location.Y < 0)
|
|
{
|
|
ball.Location = new Point(ball.Location.X, 0);
|
|
yVel = -yVel;
|
|
}
|
|
|
|
// Check for bottom wall.
|
|
if (ball.Location.Y > pgcontents.Height - ball.Height)
|
|
{
|
|
ball.Location = new Point(ball.Location.X, pgcontents.Height - ball.Size.Height);
|
|
yVel = -yVel;
|
|
}
|
|
|
|
// Check for player paddle.
|
|
if (ball.Bounds.IntersectsWith(paddleHuman.Bounds))
|
|
{
|
|
ball.Location = new Point(paddleHuman.Location.X + ball.Size.Width, ball.Location.Y);
|
|
//randomly increase x or y speed of ball
|
|
switch (rand.Next(1, 3))
|
|
{
|
|
case 1:
|
|
xveldec = xveldec + incrementx;
|
|
break;
|
|
case 2:
|
|
if (yveldec > 0)
|
|
yveldec = yveldec + incrementy;
|
|
if (yveldec < 0)
|
|
yveldec = yveldec - incrementy;
|
|
break;
|
|
}
|
|
xVel = -xVel;
|
|
API.PlaySound(Properties.Resources.typesound);
|
|
}
|
|
|
|
// Check for computer paddle.
|
|
if (ball.Bounds.IntersectsWith(paddleComputer.Bounds))
|
|
{
|
|
ball.Location = new Point(paddleComputer.Location.X - paddleComputer.Size.Width + 1, ball.Location.Y);
|
|
xveldec = xveldec + incrementx;
|
|
xVel = -xVel;
|
|
API.PlaySound(Properties.Resources.typesound);
|
|
}
|
|
|
|
// Check for left wall.
|
|
if (ball.Location.X < -100)
|
|
{
|
|
ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2);
|
|
paddleComputer.Location = new Point(paddleComputer.Location.X, ball.Location.Y);
|
|
if (xVel > 0)
|
|
xVel = -xVel;
|
|
pnllose.Show();
|
|
gameTimer.Stop();
|
|
counter.Stop();
|
|
lblmissedout.Text = "You Missed Out On:" + Environment.NewLine + lblstatscodepoints.Text.Replace("Codepoints earned: ", "") + " Codepoints";
|
|
}
|
|
|
|
// Check for right wall.
|
|
if (ball.Location.X > this.Width - ball.Size.Width - paddleComputer.Width + 100)
|
|
{
|
|
ball.Location = new Point(this.Size.Width / 2 + 200, this.Size.Height / 2);
|
|
paddleComputer.Location = new Point(paddleComputer.Location.X, ball.Location.Y);
|
|
if (xVel > 0)
|
|
xVel = -xVel;
|
|
beatairewardtotal = beatairewardtotal + beataireward;
|
|
lblbeatai.Show();
|
|
lblbeatai.Text = "You got " + beataireward + " codepoints for beating the Computer!";
|
|
tmrcountdown.Start();
|
|
gameTimer.Stop();
|
|
counter.Stop();
|
|
}
|
|
|
|
//lblstats.Text = "Xspeed: " & Math.Abs(xVel) & " Yspeed: " & Math.Abs(yVel) & " Human Location: " & paddleHuman.Location.ToString & " Computer Location: " & paddleComputer.Location.ToString & Environment.NewLine & " Ball Location: " & ball.Location.ToString & " Xdec: " & xveldec & " Ydec: " & yveldec & " Xinc: " & incrementx & " Yinc: " & incrementy
|
|
lblstatsX.Text = "Xspeed: " + xveldec;
|
|
lblstatsY.Text = "Yspeed: " + yveldec;
|
|
lblstatscodepoints.Text = "Codepoints earned: " + (levelrewards[level - 1] + beatairewardtotal).ToString();
|
|
|
|
lbllevelandtime.Text = "Level: " + level + " - " + secondsleft + " Seconds Left";
|
|
|
|
if (xVel > 20 || xVel < -20)
|
|
{
|
|
paddleHuman.Width = Math.Abs(xVel);
|
|
paddleComputer.Width = Math.Abs(xVel);
|
|
}
|
|
else {
|
|
paddleHuman.Width = 20;
|
|
paddleComputer.Width = 20;
|
|
}
|
|
|
|
computerspeed = Math.Abs(yVel);
|
|
|
|
// pgcontents.Refresh()
|
|
// pgcontents.CreateGraphics.FillRectangle(Brushes.Black, ball.Location.X, ball.Location.Y, ball.Width, ball.Height)
|
|
}
|
|
}
|
|
}
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void counter_Tick(object sender, EventArgs e)
|
|
{
|
|
if (this.Left < Screen.PrimaryScreen.Bounds.Width)
|
|
{
|
|
if (this.Height != API.CurrentSkin.titlebarheight)
|
|
{
|
|
secondsleft = secondsleft - 1;
|
|
if (secondsleft == -1)
|
|
{
|
|
secondsleft = 60;
|
|
level = level + 1;
|
|
generatenextlevel();
|
|
pnlgamestats.Show();
|
|
pnlgamestats.BringToFront();
|
|
pnlgamestats.Location = new Point((pgcontents.Width / 2) - (pnlgamestats.Width / 2), (pgcontents.Height / 2) - (pnlgamestats.Height / 2));
|
|
|
|
counter.Stop();
|
|
gameTimer.Stop();
|
|
}
|
|
lblstatscodepoints.Text = "Codepoints earned: " + (levelrewards[level - 1] + beatairewardtotal).ToString();
|
|
}
|
|
}
|
|
}
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void btnplayon_Click(object sender, EventArgs e)
|
|
{
|
|
xveldec = levelxspeed;
|
|
yveldec = levelyspeed;
|
|
|
|
secondsleft = 60;
|
|
|
|
tmrcountdown.Start();
|
|
lblbeatai.Text = "Get " + beataireward + " codepoints for beating the Computer!";
|
|
pnlgamestats.Hide();
|
|
lblbeatai.Show();
|
|
ball.Location = new Point(paddleHuman.Location.X + paddleHuman.Width + 50, paddleHuman.Location.Y + paddleHuman.Height / 2);
|
|
if (xVel < 0)
|
|
xVel = Math.Abs(xVel);
|
|
lbllevelandtime.Text = "Level: " + level + " - " + secondsleft + " Seconds Left";
|
|
}
|
|
|
|
//Increase the ball speed stats for the next level
|
|
private void generatenextlevel()
|
|
{
|
|
lbllevelreached.Text = "You Reached Level " + level + "!";
|
|
|
|
lblpreviousstats.Text = "Initial Ball X Speed: " + levelxspeed + Environment.NewLine + "Initial Ball Y Speed: " + levelyspeed + Environment.NewLine + "Increment X Speed: " + incrementx + Environment.NewLine + "Increment Y Speed: " + incrementy;
|
|
|
|
switch (rand.Next(1, 3))
|
|
{
|
|
case 1:
|
|
levelxspeed = levelxspeed + 1;
|
|
break;
|
|
case 2:
|
|
levelxspeed = levelxspeed + 2;
|
|
break;
|
|
}
|
|
|
|
switch (rand.Next(1, 3))
|
|
{
|
|
case 1:
|
|
levelyspeed = levelyspeed + 1;
|
|
break;
|
|
case 2:
|
|
levelyspeed = levelyspeed + 2;
|
|
break;
|
|
}
|
|
|
|
switch (rand.Next(1, 6))
|
|
{
|
|
case 1:
|
|
incrementx = incrementx + 0.1;
|
|
break;
|
|
case 2:
|
|
incrementx = incrementx + 0.2;
|
|
break;
|
|
case 3:
|
|
incrementy = incrementy + 0.1;
|
|
break;
|
|
case 4:
|
|
incrementy = incrementy + 0.2;
|
|
break;
|
|
case 5:
|
|
incrementy = incrementy + 0.3;
|
|
break;
|
|
}
|
|
|
|
lblnextstats.Text = "Initial Ball X Speed: " + levelxspeed + Environment.NewLine + "Initial Ball Y Speed: " + levelyspeed + Environment.NewLine + "Increment X Speed: " + incrementx + Environment.NewLine + "Increment Y Speed: " + incrementy;
|
|
|
|
if (level < 15)
|
|
{
|
|
beataireward = level * 2;
|
|
}
|
|
else {
|
|
double br = levelrewards[level - 1] / 10;
|
|
beataireward = (int)Math.Round(br);
|
|
}
|
|
|
|
totalreward = levelrewards[level - 1] + beatairewardtotal;
|
|
|
|
btncashout.Text = "Cash out with " + totalreward.ToString() + " codepoints!";
|
|
btnplayon.Text = "Play on for " + (levelrewards[level] + beatairewardtotal).ToString() + " codepoints!";
|
|
}
|
|
|
|
private void setuplevelrewards()
|
|
{
|
|
levelrewards[0] = 0;
|
|
levelrewards[1] = 1;
|
|
levelrewards[2] = 3;
|
|
levelrewards[3] = 7;
|
|
levelrewards[4] = 13;
|
|
levelrewards[5] = 20;
|
|
levelrewards[6] = 30;
|
|
levelrewards[7] = 45;
|
|
levelrewards[8] = 60;
|
|
levelrewards[9] = 80;
|
|
levelrewards[10] = 100;
|
|
levelrewards[11] = 125;
|
|
levelrewards[12] = 150;
|
|
levelrewards[13] = 200;
|
|
levelrewards[14] = 250;
|
|
levelrewards[15] = 300;
|
|
levelrewards[16] = 400;
|
|
levelrewards[17] = 500;
|
|
levelrewards[18] = 650;
|
|
levelrewards[19] = 800;
|
|
levelrewards[20] = 1000;
|
|
levelrewards[21] = 1250;
|
|
levelrewards[22] = 1600;
|
|
levelrewards[23] = 2000;
|
|
levelrewards[24] = 2500;
|
|
levelrewards[25] = 3000;
|
|
levelrewards[26] = 3750;
|
|
levelrewards[27] = 4500;
|
|
levelrewards[28] = 5500;
|
|
levelrewards[29] = 7000;
|
|
levelrewards[30] = 9000;
|
|
levelrewards[31] = 11000;
|
|
levelrewards[32] = 13500;
|
|
levelrewards[33] = 16000;
|
|
levelrewards[34] = 20000;
|
|
levelrewards[35] = 25000;
|
|
levelrewards[36] = 32000;
|
|
levelrewards[37] = 40000;
|
|
levelrewards[38] = 50000;
|
|
levelrewards[39] = 75000;
|
|
levelrewards[40] = 100000;
|
|
}
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void countdown_Tick(object sender, EventArgs e)
|
|
{
|
|
if (this.Left < Screen.PrimaryScreen.Bounds.Width)
|
|
{
|
|
if (this.Height != API.CurrentSkin.titlebarheight)
|
|
{
|
|
switch (countdown)
|
|
{
|
|
case 0:
|
|
countdown = 3;
|
|
lblcountdown.Hide();
|
|
lblbeatai.Hide();
|
|
API.PlaySound(Properties.Resources.writesound);
|
|
gameTimer.Start();
|
|
counter.Start();
|
|
tmrcountdown.Stop();
|
|
break;
|
|
case 1:
|
|
lblcountdown.Text = "1";
|
|
countdown = countdown - 1;
|
|
API.PlaySound(Properties.Resources.writesound);
|
|
break;
|
|
case 2:
|
|
lblcountdown.Text = "2";
|
|
countdown = countdown - 1;
|
|
API.PlaySound(Properties.Resources.writesound);
|
|
break;
|
|
case 3:
|
|
lblcountdown.Text = "3";
|
|
countdown = countdown - 1;
|
|
API.PlaySound(Properties.Resources.writesound);
|
|
lblcountdown.Show();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void btncashout_Click(object sender, EventArgs e)
|
|
{
|
|
pnlgamestats.Hide();
|
|
pnlfinalstats.Show();
|
|
lblfinalcodepointswithtext.Text = "You cashed out with " + totalreward + " codepoints!";
|
|
lblfinallevelreached.Text = "Codepoints rewarded for reaching level " + (level - 1).ToString();
|
|
lblfinallevelreward.Text = levelrewards[level - 1].ToString();
|
|
lblfinalcomputerreward.Text = beatairewardtotal.ToString();
|
|
lblfinalcodepoints.Text = totalreward + " CP";
|
|
API.AddCodepoints(totalreward);
|
|
}
|
|
|
|
private void newgame()
|
|
{
|
|
pnlfinalstats.Hide();
|
|
pnllose.Hide();
|
|
pnlintro.Hide();
|
|
|
|
level = 1;
|
|
totalreward = 0;
|
|
beataireward = 2;
|
|
beatairewardtotal = 0;
|
|
secondsleft = 60;
|
|
lblstatscodepoints.Text = "Codepoints: ";
|
|
//reset stats text
|
|
lblstatsX.Text = "Xspeed: ";
|
|
lblstatsY.Text = "Yspeed: ";
|
|
|
|
levelxspeed = 3;
|
|
levelyspeed = 3;
|
|
|
|
incrementx = 0.4;
|
|
incrementy = 0.2;
|
|
|
|
xveldec = levelxspeed;
|
|
yveldec = levelyspeed;
|
|
|
|
tmrcountdown.Start();
|
|
lblbeatai.Text = "Get " + beataireward + " codepoints for beating the Computer!";
|
|
pnlgamestats.Hide();
|
|
lblbeatai.Show();
|
|
ball.Location = new Point(paddleHuman.Location.X + paddleHuman.Width + 50, paddleHuman.Location.Y + paddleHuman.Height / 2);
|
|
if (xVel < 0)
|
|
xVel = Math.Abs(xVel);
|
|
lbllevelandtime.Text = "Level: " + level + " - " + secondsleft + " Seconds Left";
|
|
}
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void btnplayagain_Click(object sender, EventArgs e)
|
|
{
|
|
newgame();
|
|
}
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void btnlosetryagain_Click(object sender, EventArgs e)
|
|
{
|
|
newgame();
|
|
}
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void btnstartgame_Click(object sender, EventArgs e)
|
|
{
|
|
newgame();
|
|
}
|
|
|
|
Random rand = new Random();
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void tmrstoryline_Tick(object sender, EventArgs e)
|
|
{
|
|
// Random chance of showing getshiftnet storyline
|
|
int i = rand.Next(0, 100);
|
|
|
|
if (i >= 25 && i <= 50)
|
|
{
|
|
Terminal term = new Terminal();
|
|
API.CreateForm(term, "Terminal", Properties.Resources.iconTerminal);
|
|
term.StartShiftnetStory();
|
|
tmrstoryline.Stop();
|
|
}
|
|
|
|
}
|
|
|
|
// ERROR: Handles clauses are not supported in C#
|
|
private void me_closing(object sender, FormClosingEventArgs e)
|
|
{
|
|
tmrstoryline.Stop();
|
|
}
|
|
}
|
|
}
|