2016-04-09 13:16:39 -04:00
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 ;
2016-07-19 21:53:26 -04:00
using ShiftUI ;
2016-04-09 13:16:39 -04:00
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.
2016-07-19 21:53:26 -04:00
private void pongMain_MouseMove ( object sender , ShiftUI . MouseEventArgs e )
2016-04-09 13:16:39 -04:00
{
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 ( ) ;
}
}
}