教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 学前教育 >

面向对象程序设计实训(吃金豆游戏设计与实现)(4)

来源:网络收集 时间:2026-09-05
导读: cellArr = new Cell[8, 8]; for (int i = 0; i cellArr[i, j] = new Cell(i, j, panel1.Width / 8, panel1.Height / 8); } } private void panel1_Paint(object sender, PaintEventArgs e){ for (int i = 0; i priv

cellArr = new Cell[8, 8]; for (int i = 0; i < 8; i++){ for (int j = 0; j < 8; j++)

cellArr[i, j] = new Cell(i, j, panel1.Width / 8, panel1.Height / 8); } }

private void panel1_Paint(object sender, PaintEventArgs e){ for (int i = 0; i < cellArr.GetLength(0); i++){ for (int j = 0; j < cellArr.GetLength(1); j++) cellArr[i, j].Draw(e.Graphics); } }

private void btnClear_Click(object sender, EventArgs e){ int r, c;

r = int.Parse(txtRow.Text); c = int.Parse(txtCol.Text);

cellArr[r, c].Clear(panel1.CreateGraphics(), panel1.BackColor); }

例三:设计一个pacman,要求:

(1) 可以通过按钮控制它的上下左右运动。 (2)

Cell -r:int //行 -c:int //列 -w:int //宽度 -h:int //高度 +Cell(int r,int c,int w,int h); +Draw(Graphics g):void +Clear(Graphics g,Color foreColor):void +abstract DrawImage(Graphics g,int x,int y):void Pacman -dir:Directoin //Direction枚举四种方向 +Pacman(int r,int c,int w,int h,Direction dir); +Draw(Graphics g):void +Move():void +override DrawImage(Graphics g,int x,int y):void

代码参考:

enum Direction{Up,Down,Left,Right}; class Pacman:Cell{

protected Direction dir;

public Pacman(int r,int c,int w,int h,Direction dir):base(r,c,w,h){ this.dir = dir; }

public override void DrawImage(Graphics g, int x, int y){

g.FillEllipse(Brushes.Black, x + (w - 20) / 2, y + (h - 20) / 2, 20, 20); }

public void Move(){ switch (dir){

case Direction.Up: r--; break; case Direction.Down: r++; break; case Direction.Left: c--; break; case Direction.Right: c++; break; } }

public Direction Dir{ get {

return dir; } set {

dir = value; } } }

public partial class Form1 : Form{ private Pacman myPacman; public Form1(){

InitializeComponent();

myPacman = new Pacman( 0, 0,

panel1.Width / 16, panel1.Height / 8, Direction.Right ); }

private void panel1_Paint(object sender, PaintEventArgs e){ myPacman.Draw(e.Graphics); }

private void btnUp_Click(object sender, EventArgs e){ myPacman.Dir = Direction.Up; myPacman.Move(); panel1.Invalidate(); panel1.Update(); }

private void btnDown_Click(object sender, EventArgs e){ myPacman.Dir = Direction.Down; myPacman.Move(); panel1.Invalidate(); panel1.Update(); }

private void btnLeft_Click(object sender, EventArgs e){ myPacman.Dir = Direction.Left; myPacman.Move(); panel1.Invalidate(); panel1.Update(); }

private void btnRight_Click(object sender, EventArgs e){ myPacman.Dir = Direction.Right; myPacman.Move(); panel1.Invalidate(); panel1.Update(); } }

(2)向上、下、左、右运动时,Pacman的嘴形各不相同。

提示:用画扇形,或画饼图的方法实现 Graphics g = e.Graphic;

g.DrawArc(?); //画扇形 g.FillPie(?); //画饼图 (3)用键盘捕获其上下左右键控制它的运动。

在Form1类中重写父类的抽象方法bool ProcessDialogKey(Keys keyDate); protected override bool ProcessDialogKey(Keys keyDate){ switch (keydate){ case Keys.Up:

myPcman.dir = Direction.Up; break; case Keys.Down:

myPcman.dir = Direction.Down; break; case Keys.Left:

myPcman.dir = Direction.Left; break; case Keys.Right:

myPcman.dir = Direction.Right; break; }

return base.ProcessDialogKey(keydate); }

4.定时器控件(Timer)

Timer可以按照指定时间间隔来触发事件,可利用它来执行周期性的操作或指定时间长度操作(比如动画制作、延时等)。 ? 常用属性:

(1) Enabled:指定定时器是否运行(即是否可触发事件) (2) Interval:指定时间间隔(以毫秒为单位) ? 常用方法: (1) Start(); (2) Stop(); ? 事件

Tick //时间间隔到达指定时间且时钟处于运行状态时触发。 对应代理类型为EventHandler。

程序例:编程设计一个在窗体内随机滚动的小球。 1、 设计一个球类:

class Ball{

const int HEIGHT = 20,WIDTH=20; private int xPos; private int yPos;

private int dx = 3; private int dy = 3;

public Ball(){xPos = yPos = 0;}

public Ball(int x,int y){xPos = x,yPos = y;} public void Draw(Graphics g){?} public void Move(Size room){?} }

//小球的Draw方法

public void Draw(Graphics g){ Brush b = Brushes.Red;

g.FillEllipse(b,xPos,yPos,WIDTH,HEIGHT); }

//小球的Move方法

public void Move(Size room){

Int maxX = room.Width-WIDTH; Int maxY = room.Height-HEIGHT; xPos+=dx; yPos+=dy;

if(xPos<0 || xPos>maxX) dx = -dx;

if(yPos<0 || yPos>maxY) dy = -dy; }

2、 窗体内中增加球和定时器对象

Class Form1:Form{

Private Ball myBall; Private Timer timer; Public Form1(){

myBall = new Ball(); timer = new Timer(); timer.Enabled = true; timer.Interval = 100; timer.Tick+=TimerTick;

}

//Form1的Paintg事件处理方法

Private void Form1_Paint(object se …… 此处隐藏:2000字,全部文档内容请下载后查看。喜欢就下载吧 ……

面向对象程序设计实训(吃金豆游戏设计与实现)(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/596690.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)