using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace 面向对象小项目之飞机小游戏
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Plane pla = new Plane();//飞机对象
Bullet bul = new Bullet();//子弹对象
private void Form1_Load(object sender, EventArgs e)
{
pla.StartInit();
bul.StatInit();
} private void timer1_Tick(object sender, EventArgs e)
{
pla.Move(panel1);
bul.Move(panel1);
this.Invalidate();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
pla.Draw(panel1, panel1.CreateGraphics());
bul.Draw(panel1, panel1.CreateGraphics());
bul.IsHit(pla, panel1);
}
/// <summary>
/// 鼠标点击
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void panel1_MouseClick(object sender, MouseEventArgs e)
{
bul.SatrtFire(e, panel1);
}
}
}//子弹类的代码
namespace 面向对象小项目之飞机小游戏
{
class Bullet:GameObject
{
/// <summary>
/// 绘制子弹
/// </summary>
/// <param name="p"></param>
/// <param name="g"></param>
public override void Draw(Panel p, Graphics g)
{
g.FillEllipse(Brushes.Black ,this.X1, this.Y1, this.Size, this.Size);
}
/// <summary>
/// 子弹移动
/// </summary>
/// <param name="p"></param>
public override void Move(System.Windows.Forms.Panel p)
{
//if(this.Y1 < 0)
//{ //}
this.Y1 -= this.Speed;
}
/// <summary>
/// 初始化
/// </summary>
public void StatInit()
{
this.Speed = 5;
this.X1 = 0;
this.Y1 = 500;
this.Size = 40; }
/// <summary>
/// 开始攻击
/// </summary>
public void SatrtFire(MouseEventArgs e,Panel p)
{
this.Y1 = p.Height;
this.X1 = e.Location.X; }
/// <summary>
/// 是否打中飞机
/// </summary>
/// <param name="p"></param>
/// <param name="p1"></param>
public void IsHit(Plane p,Panel p1)
{
if (this.X1 == p.X1 || this.Y1 == p.Y1)
{
if (p.HitTimes < 3)
{
p.Glimmer(p1);
}
else
{
MessageBox.Show("哈哈!你打中飞机了!");
}
}
}
}
}我的飞机图片可以正常重绘 可是子弹却还残留上次的 造成图片中的这样 修改多次无果
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace 面向对象小项目之飞机小游戏
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Plane pla = new Plane();//飞机对象
Bullet bul = new Bullet();//子弹对象
private void Form1_Load(object sender, EventArgs e)
{
pla.StartInit();
bul.StatInit();
} private void timer1_Tick(object sender, EventArgs e)
{
pla.Move(panel1);
bul.Move(panel1);
this.Invalidate();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
pla.Draw(panel1, panel1.CreateGraphics());
bul.Draw(panel1, panel1.CreateGraphics());
bul.IsHit(pla, panel1);
}
/// <summary>
/// 鼠标点击
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void panel1_MouseClick(object sender, MouseEventArgs e)
{
bul.SatrtFire(e, panel1);
}
}
}//子弹类的代码
namespace 面向对象小项目之飞机小游戏
{
class Bullet:GameObject
{
/// <summary>
/// 绘制子弹
/// </summary>
/// <param name="p"></param>
/// <param name="g"></param>
public override void Draw(Panel p, Graphics g)
{
g.FillEllipse(Brushes.Black ,this.X1, this.Y1, this.Size, this.Size);
}
/// <summary>
/// 子弹移动
/// </summary>
/// <param name="p"></param>
public override void Move(System.Windows.Forms.Panel p)
{
//if(this.Y1 < 0)
//{ //}
this.Y1 -= this.Speed;
}
/// <summary>
/// 初始化
/// </summary>
public void StatInit()
{
this.Speed = 5;
this.X1 = 0;
this.Y1 = 500;
this.Size = 40; }
/// <summary>
/// 开始攻击
/// </summary>
public void SatrtFire(MouseEventArgs e,Panel p)
{
this.Y1 = p.Height;
this.X1 = e.Location.X; }
/// <summary>
/// 是否打中飞机
/// </summary>
/// <param name="p"></param>
/// <param name="p1"></param>
public void IsHit(Plane p,Panel p1)
{
if (this.X1 == p.X1 || this.Y1 == p.Y1)
{
if (p.HitTimes < 3)
{
p.Glimmer(p1);
}
else
{
MessageBox.Show("哈哈!你打中飞机了!");
}
}
}
}
}我的飞机图片可以正常重绘 可是子弹却还残留上次的 造成图片中的这样 修改多次无果
{
panel1.Refresh(); //加一句
pla.Draw(panel1, panel1.CreateGraphics());
bul.Draw(panel1, panel1.CreateGraphics());
bul.IsHit(pla, panel1);
}
private void panel1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics;
bul.Draw(g);
}
public override void Draw(Graphics g)
{
g.FillEllipse(Brushes.Black ,this.X1, this.Y1, this.Size, this.Size);
}
public override void Move(System.Windows.Forms.Panel p)
{
this.Y1 -= this.Speed;
p.Refresh();//自己控制刷新时机
} 以上写法应该能保证你在panel上重绘