using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
namespace knight
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private int square = 100, kx = -500, ky = -500, pnum=0, enemybreach =0,kill=0,
lightening=0, picnum=0;
private PictureBox pic1 = new PictureBox();
private PictureBox[] pornpic = new PictureBox[1];
private bool mf = false, lightf,turn= false;
private Point[] porn = new Point[0], move = new Point[8],
plight= {new Point(-2,-2),new Point(-2,-2),new Point(-2,-2),new Point(-2,-2)};
private void Form1_Paint(object sender, PaintEventArgs e)
{
//board line
/*for (int i = 0; i * square < this.Size.Width; i++)
{
Pen bluepen = new Pen(Color.DarkBlue, 2);
Point a = new Point( square * i, 0);
Point b = new Point( square * i, this.Size.Height);
e.Graphics.DrawLine(bluepen, a, b);
}
for (int i = 0; i * square < this.Size.Height; i++)
{
Pen bluepen = new Pen(Color.DarkBlue, 2);
Point a = new Point(0, square * i);
Point b = new Point(this.Size.Height, square * i);
e.Graphics.DrawLine(bluepen, a, b);
}*/
/*move[0] = new Point(kx - 2 * square, ky - square);
move[1] = new Point(kx - square, ky - 2 * square);
move[2] = new Point(kx + 2 * square, ky - square);
move[3] = new Point(kx + square, ky - 2 * square);
move[4] = new Point(kx - 2 * square, ky + square);
move[5] = new Point(kx - square, ky + 2 * square);
move[6] = new Point(kx + 2 * square, ky + square);
move[7] = new Point(kx + square, ky + 2 * square);
SolidBrush greenBrush = new SolidBrush(Color.MediumSeaGreen);
for (int i = 0; i < 8; i++)
{
Rectangle rec = new Rectangle(move[i], new Size(square, square));
e.Graphics.FillRectangle(greenBrush, rec);
}*/
//lightening ability
Random r = new Random();
if (kill - lightening == 2)
{
lightening = kill;
Point pl = new Point();
for (bool done = false; done == false; )
{
done = true;
pl = new Point(r.Next(8), r.Next(8));
for (int i = 0; i < 4; i++)
{
if (pl == plight[i])
{
done = false;
}
}
}
for (int i = 0; i < 3; i++)
{
plight[i] = plight[i + 1];
}
plight[3] = pl;
}
for (int j = 0; j < 4; j++)
{
SolidBrush blueBrush = new SolidBrush(Color.LightSalmon);
Point point1 = new Point(plight[j].X * square + 50, plight[j].Y * square + 0);
Point point2 = new Point(plight[j].X * square + 40, plight[j].Y * square + 40);
Point point3 = new Point(plight[j].X * square + 100, plight[j].Y * square + 40);
Point point4 = new Point(plight[j].X * square + 50, plight[j].Y * square + 100);
Point point5 = new Point(plight[j].X * square + 60, plight[j].Y * square + 60);
Point point6 = new Point(plight[j].X * square + 0, plight[j].Y * square + 60);
PointF[] curvePoints = { point1, point2, point3, point4, point5, point6 };
FillMode newFillMode = FillMode.Winding;
e.Graphics.FillPolygon(blueBrush, curvePoints, newFillMode);
}
if (lightf == true)
{
lightf = false;
SolidBrush lightBrush = new SolidBrush(Color.LightSalmon);
Rectangle rec1 = new Rectangle(new Point(kx/square*square-70,0), new Size(40, square*8));
e.Graphics.FillRectangle(lightBrush, rec1);
Rectangle rec2 = new Rectangle(new Point(kx / square * square +30, 0), new Size(40, square * 8));
e.Graphics.FillRectangle(lightBrush, rec2);
Rectangle rec3 = new Rectangle(new Point(kx / square * square + 130, 0), new Size(40, square * 8));
e.Graphics.FillRectangle(lightBrush, rec3);
}
}
private void drawknight()
{
this.Controls.Remove(pic1);
Image img1 = Image.FromFile("white knight.png");
pic1.Location = new System.Drawing.Point(kx, ky);
pic1.ClientSize = new Size(square, square);
pic1.Image = img1;
this.Controls.Add(pic1);
pic1.BringToFront();
move[0] = new Point(kx - 2 * square, ky - square);
move[1] = new Point(kx - square, ky - 2 * square);
move[2] = new Point(kx + 2 * square, ky - square);
move[3] = new Point(kx + square, ky - 2 * square);
move[4] = new Point(kx - 2 * square, ky + square);
move[5] = new Point(kx - square, ky + 2 * square);
move[6] = new Point(kx + 2 * square, ky + square);
move[7] = new Point(kx + square, ky + 2 * square);
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
int kxo = kx, kyo=ky;
kx = (Cursor.Position.X - this.Location.X - 10) / square * square;
ky = (Cursor.Position.Y - this.Location.Y - 40) / square * square;
if (mf == true)
{
for (int i = 0; i < 8; i++)
{
if (kx == move[i].X && ky == move[i].Y&&kx<750)
{
drawknight();
//step on enemy porn, kill it
for (int k = 0; k < pnum; k++)
{
if (new Point(kx / square, ky / square) == porn[k])
{
Point[] pornnew = deletearray(porn, k);
Array.Resize(ref porn, pnum - 1);
porn = pornnew;
pnum--;
textBox1.Text = Convert.ToString(pnum);
kill++;
textBox3.Text = Convert.ToString(kill);
drawporn();
}
}
//here comes the lightening
for(int k=0;k<4;k++)
{
if(new Point(kx / square, ky / square) == plight[k])
{
lightf = true;
plight[k] = new Point(-2, -2);
for (bool done = false; done == false; )
{
done = true;
for (int j = 0; j < pnum; j++)
{
if (kx / square == porn[j].X || kx / square - 1 == porn[j].X || kx / square + 1 == porn[j].X)
{
Point[] pornnew = deletearray(porn, j);
Array.Resize(ref porn, pnum - 1);
porn = pornnew;
pnum--;
textBox1.Text = Convert.ToString(pnum);
kill++;
lightening = kill;
textBox3.Text = Convert.ToString(kill);
done = false;
break;
}
}
}
drawporn();
}
}
this.Refresh();
return;
}
}
kx = kxo; ky = kyo;
}
else
{
mf = true;
drawknight();
timer1.Enabled = true;
}
}
public static Bitmap ChangeOpacity(Image img, float opacityvalue)
{
Bitmap bmp = new Bitmap(img.Width, img.Height); // Determining Width and Height of Source Image
Graphics graphics = Graphics.FromImage(bmp);
ColorMatrix colormatrix = new ColorMatrix();
colormatrix.Matrix33 = opacityvalue;
ImageAttributes imgAttribute = new ImageAttributes();
imgAttribute.SetColorMatrix(colormatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
graphics.DrawImage(img, new Rectangle(0, 0, bmp.Width, bmp.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, imgAttribute);
graphics.Dispose(); // Releasing all resource used by graphics
return bmp;
}
//black porn attack
private void timer1_Tick(object sender, EventArgs e)
{
//sporn new enemy porn
Random r = new Random();
Point sporn1 = new Point(r.Next(8), 0);
Point sporn2 = new Point();
for (bool done = false; done == false; )
{
int temp = r.Next(8);
if (temp != sporn1.X)
{
sporn2.X = temp;
sporn2.Y = 0;
done = true;
}
}
//old enemy porn move forward
for (int j = 0; j < pnum; j++)
{
porn[j].Y += 1;
}
Array.Resize(ref porn, pnum + 1);
addarray(porn, pnum + 1, sporn1.X, sporn1.Y);
Array.Resize(ref porn, pnum + 2);
addarray(porn, pnum + 2, sporn2.X, sporn2.Y);
pnum += 2;
//blocked by knight
bool fblock = false; int iblock = 0;
for (int j = 0; j < pnum; j++)
{
if (porn[j].X == kx / square && porn[j].Y == ky / square)
{
fblock = true; iblock = j;
break;
}
}
while (fblock == true)
{
fblock = false;
porn[iblock].Y--;
for (int k = iblock + 1; k < pnum; k++)
{
if (porn[k] == porn[iblock])
{
fblock = true;
iblock = k;
break;
}
}
}
//sporn place blocked
if (porn[pnum - 1].Y < 0)
{
for (bool done = false; done == false; )
{
int temp = r.Next(8);
if (temp != sporn1.X && temp != porn[pnum - 1].X)
{
porn[pnum - 1].X = temp;
porn[pnum - 1].Y = 0;
done = true;
}
}
}
if (porn[pnum - 2].Y < 0)
{
for (bool done = false; done == false; )
{
int temp = r.Next(8);
if (temp != sporn1.X && temp != porn[pnum - 2].X)
{
porn[pnum - 2].X = temp;
porn[pnum - 2].Y = 0;
done = true;
}
}
}
//enemy porn reach our front line
for (bool done = false; done == false; )
{
done = true;
for (int j = 0; j < pnum; j++)
{
if (porn[j].Y == 8)
{
enemybreach++;
Point[] pornnew = deletearray(porn, j);
Array.Resize(ref porn, pnum - 1);
porn = pornnew;
pnum--;
done = false;
break;
}
}
}
textBox2.Text = Convert.ToString(Convert.ToInt32(textBox2.Text) + enemybreach);
enemybreach = 0;
textBox1.Text = Convert.ToString(pnum);
drawporn();
//lighten disappear
for (int i = 0; i < 4; i++)
{
if (plight[i] != new Point(-2, -2))
{
if (turn == true)
{
turn = false;
plight[i] = new Point(-2, -2);
}
else
{
turn = true;
}
break;
}
}
lightening = kill;
this.Refresh();
}
private void drawporn()
{
foreach (PictureBox x in pornpic)
{
this.Controls.Remove(x);
}
pornpic = new PictureBox[pnum];
for (int i = 0; i < pnum; i++)
{
pornpic[i] = new PictureBox();
}
for (int i = 0; i < pnum; i++)
{
pornpic[i].Location = new System.Drawing.Point(porn[i].X * square, porn[i].Y * square);
pornpic[i].BackColor = Color.Transparent;
pornpic[i].ClientSize = new Size(square, square);
Image pornimg = Image.FromFile("black porn.png");
Image pornimgtrans = ChangeOpacity(pornimg, 0.5f);
pornpic[i].Image = pornimgtrans;
this.Controls.Add(pornpic[i]);
pornpic[i].SendToBack();
//x.MouseClick += new MouseEventHandler(Form1_MouseClick);
pornpic[i].MouseClick += Form1_MouseClick;
}
}
private Point[] addarray(Point[] array1, int num, int px, int py)
{
Point[] oldarray = array1;
for (int i = 0; i < num - 1; i++)
{
array1[i] = oldarray[i];
}
array1[num - 1].X = px;
array1[num - 1].Y = py;
return array1;
}
private Point[] deletearray(Point[] array1, int index)
{
Point[] newarray = new Point[pnum - 1];
for (int i = 0; i < index; i++)
{
newarray[i] = array1[i];
}
for (int i = index; i < pnum - 1; i++)
{
newarray[i] = array1[i + 1];
}
return newarray;
}
private void timer2_Tick(object sender, EventArgs e)
{
Rectangle bounds = this.Bounds;
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
Graphics g = Graphics.FromImage(bitmap);
g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
bitmap.Save("test" + picnum + ".jpg");
picnum++;
}
}
}
reference:
picturebox opacity:
No comments:
Post a Comment