This repository has been archived on 2022-08-05. You can view files and clone it, but cannot push or open issues or pull requests.
LaptopSimulator2015/SIT/MainForm.cs

151 lines
6.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace SIT
{
public partial class MainForm : Form
{
List<Point> invadersAliens = new List<Point>();
List<Point> invadersBullets = new List<Point>();
Point invadersPlayer;
uint invadersTime = 0;
uint invadersPrevTime = 0;
bool invadersCanShoot = true;
public MainForm()
{
InitializeComponent();
invadersPlayer = new Point(invadersPanel.Width / 4, invadersPanel.Height / 2);
}
private void Panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
try
{
g.Clear(Color.Black);
for (int i = 0; i < invadersAliens.Count; i++)
{
g.FillRectangle(new SolidBrush(Color.Red), new Rectangle(invadersAliens[i], new Size(10, 10)));
}
for (int i = 0; i < invadersBullets.Count; i++)
{
g.FillRectangle(new SolidBrush(Color.White), new Rectangle(invadersBullets[i], new Size(5, 5)));
}
g.FillRectangle(new SolidBrush(Color.Green), new Rectangle(invadersPlayer, new Size(10, 10)));
Random random = new Random();
if (invadersTime != invadersPrevTime)
{
if (random.Next(0, 100000) < invadersTime + 1300)
invadersAliens.Add(new Point(invadersPanel.Width, random.Next(invadersPanel.Height - 10)));
invadersPrevTime = invadersTime;
for (int i = 0; i < invadersAliens.Count; i++)
{
invadersAliens[i] = new Point(invadersAliens[i].X - 1, invadersAliens[i].Y);
if (Math.Pow(invadersPlayer.X - invadersAliens[i].X, 2) + Math.Pow(invadersPlayer.Y - invadersAliens[i].Y, 2) < 100 | invadersAliens[i].X < 0)
{
invadersTimer.Enabled = false;
g.Clear(Color.Red);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
RectangleF rectf = new RectangleF(invadersPanel.Width / 2, invadersPanel.Height / 2, 90, 50);
g.DrawString("Lost.", new Font("Tahoma", 20), Brushes.Black, rectf);
}
}
invadersCanShoot = invadersCanShoot | !IsKeyDown(Keys.Space);
List<int> aliensToRemove = new List<int>();
List<int> bulletsToRemove = new List<int>();
for (int i = 0; i < invadersBullets.Count; i++)
{
invadersBullets[i] = new Point(invadersBullets[i].X + 4, invadersBullets[i].Y);
for (int j = 0; j < invadersAliens.Count; j++)
{
if (Math.Pow(invadersBullets[i].X - invadersAliens[j].X - 2.5f, 2) + Math.Pow(invadersBullets[i].Y - invadersAliens[j].Y - 2.5f, 2) < 56.25f)
{
if (!aliensToRemove.Contains(j))
aliensToRemove.Add(j);
if (!bulletsToRemove.Contains(i))
bulletsToRemove.Add(i);
}
}
if (invadersBullets[i].X > invadersPanel.Width)
bulletsToRemove.Add(i);
}
aliensToRemove = aliensToRemove.Distinct().ToList();
aliensToRemove.Sort();
aliensToRemove.Reverse();
bulletsToRemove = bulletsToRemove.Distinct().ToList();
bulletsToRemove.Sort();
bulletsToRemove.Reverse();
for (int i = 0; i < aliensToRemove.Count; i++)
{
try
{
invadersAliens.RemoveAt(aliensToRemove[i]);
}
catch { }
}
for (int i = 0; i < bulletsToRemove.Count; i++)
{
try
{
invadersBullets.RemoveAt(bulletsToRemove[i]);
}
catch { }
}
if (IsKeyDown(Keys.W))
invadersPlayer.Y -= 2;
if (IsKeyDown(Keys.A))
invadersPlayer.X -= 2;
if (IsKeyDown(Keys.S))
invadersPlayer.Y += 2;
if (IsKeyDown(Keys.D))
invadersPlayer.X += 2;
if (IsKeyDown(Keys.Space) & invadersCanShoot)
{
invadersBullets.Add(invadersPlayer);
invadersCanShoot = false;
}
if (invadersPlayer.X < 0)
invadersPlayer.X = invadersPanel.Width;
if (invadersPlayer.X > invadersPanel.Width)
invadersPlayer.X = 0;
if (invadersPlayer.Y < 0)
invadersPlayer.Y = invadersPanel.Height;
if (invadersPlayer.Y > invadersPanel.Height)
invadersPlayer.Y = 0;
}
}
catch (Exception ex) { Console.WriteLine(ex.ToString()); }
}
private void Timer1_Tick(object sender, EventArgs e)
{
invadersTime++;
invadersPanel.Invalidate();
}
private void Button1_Click(object sender, EventArgs e) => Application.Exit();
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
private static extern short GetKeyState(int keyCode);
public static bool IsKeyDown(Keys key)
{
int state = 0;
short retVal = GetKeyState((int)key);
if ((retVal & 0x8000) == 0x8000)
state |= 1;
if ((retVal & 1) == 1)
state |= 2;
return 1 == (state & 1);
}
}
}