停车场贪吃蛇游戏实训报告
更新时间:2024-01-03 07:44:01 阅读量: 教育文库 文档下载
郑州轻工业学院 网络编程基础 实训报告
实训名称: 指导教师:
姓名: 学号: 班级: 提交日期:
停车场游戏、贪吃蛇游戏
实训一
1. 实训目的
通过开发一款停车场游戏程序,熟练掌握C#编程语言、面向对象程序设计方法和可视化技术。
2. 实训题目
使用C#编程语言,开发一款停车场游戏程序。
3. 功能描述
1) 停车场有5 种颜色的汽车和6 个车位。 2) 每一辆汽车对应颜色的车位。 3) 车位之间有的有通道,有的没有。
4) 最初5 种颜色的汽车未停在对应颜色的车位。
5) 玩家点击汽车,实现将该汽车沿通道移动到空闲的车位上; 当该汽车与空间的车位之间没有通道时,则不移动汽车。 6) 玩家可以点击按钮“自来一次”,重新开始游戏。 7) 当所有的汽车都听到对应颜色的车位上时,游戏成功。
4. 需求分析
根据功能描述可知,停车场游戏的定义数据字典如下: 1) 车(Car):在停车场游戏中,车是玩家操纵的对象。车具 有位置和颜色等属性。在游戏中,玩家可以将汽车沿通道 移动到空闲的车位上。
2) 车位(Space):在停车场游戏中,车位是汽车停留的空间。 车位具有位置、大小和颜色等属性。
3) 通道(Road):在停车场游戏中,通道是汽车移动的路径。 通道具有起始点等属性。当某两个车位间有通道时,汽车 可以直接再这两个车位间移动。当某两个车位间没有通道 时,汽车不可以直接在这两个车位间移动。
5. 设计说明
根据需求分析可知,车位具有位置、大小和颜色等属性,定义 1)Space类用于描述车位的信息。通道具有起点和终点两个属性,定义
2)Road类用于描述通道的信息以及通道与车位之间的关系。车具有位置和颜色等属性,定义Car类用于描述车的信息以及车停留在哪个车位,并实现车的移动功能。
3)为了使游戏的运行更易于控制,定义Game类用于启动游戏、控制游戏和结束游戏。
4)综上所述,在停车场游戏中,有Space(车位)、Road(通道)、Car(车)、Game(游戏)和MainForm(用户接口)六个类。
6. 源代码
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 ParkingLot {
publicpartialclassForm1 : Form {
public Form1() {
InitializeComponent(); game = newGame(); for (int i = 0; i < 5; i++) {
string name = \ + i.ToString();
PictureBox pBox = (PictureBox)this.Controls.Find(name, false)[0];
pBox.Location = newPoint(game.cars[i].center.X - pictureBox0.Width / 2, game.cars[i].center.Y -pictureBox0.Height / 2);
pBox.Visible = true; } }
privateGame game;
privatevoid pictureBox0_Click(object sender, EventArgs e) {
PictureBox pBox = (PictureBox)sender;
if (game.MoveCar(0, game.cars[0].spaceNum,game.freeSpaceNum)) {
pBox.Location = newPoint(game.cars[0].center.X - pBox.Width / 2, game.cars[0].center.Y - pBox.Height / 2); if (game.Success()) {
MessageBox.Show(\恭喜!成功了\); } } else
{
MessageBox.Show(\不能移动\); }
}
privatevoid pictureBox1_Click(object sender, EventArgs e) {
PictureBox pBox = (PictureBox)sender;
if (game.MoveCar(1, game.cars[1].spaceNum, game.freeSpaceNum))
{
pBox.Location = newPoint(game.cars[1].center.X - pBox.Width / 2,
game.cars[1].center.Y - pBox.Height / 2); if (game.Success()) {
MessageBox.Show(\恭喜!成功了\); }
} else
{
MessageBox.Show(\不能移动\); } }
privatevoid pictureBox2_Click(object sender, EventArgs e) {
PictureBox pBox = (PictureBox)sender;
if (game.MoveCar(2, game.cars[2].spaceNum, game.freeSpaceNum)) {
pBox.Location = newPoint(game.cars[2].center.X - pBox.Width / 2,
game.cars[2].center.Y - pBox.Height / 2); if (game.Success())
{
MessageBox.Show(\恭喜!成功了\); } }
else
{
MessageBox.Show(\不能移动\);
} }
privatevoid pictureBox3_Click(object sender, EventArgs e) {
PictureBox pBox = (PictureBox)sender;
if (game.MoveCar(3, game.cars[3].spaceNum, game.freeSpaceNum)) {
pBox.Location = newPoint(game.cars[3].center.X - pBox.Width / 2,
game.cars[3].center.Y - pBox.Height / 2); if (game.Success()) {
InitializeComponent();
game = newGame(lawn.Width, lawn.Height); }
privatevoid Form1_Load(object sender, EventArgs e) {
}
privatevoid timer1_Tick(object sender, EventArgs e) {
if (game.isSnakeAlive) { Graphics g;
g = lawn.CreateGraphics();
game.OnTime(g, lawn.BackColor, lawn.Width, lawn.Height); if (!game.isSnakeAlive) {
MessageBox.Show(\); } } }
privatevoid ToolStripMenuItemStart_Click(object sender, EventArgs e) { Graphics g;
g = lawn.CreateGraphics();
game.Begin(g, lawn.BackColor, lawn.Width, lawn.Height); timer1.Enabled = true;
ToolStripMenuItemPause.Enabled = true; ToolStripMenuItemContinue.Enabled = false; }
privatevoid ToolStripMenuItemPause_Click(object sender, EventArgs e) {
timer1.Enabled = false;
ToolStripMenuItemPause.Enabled = false; ToolStripMenuItemContinue.Enabled = true; }
privatevoid ToolStripMenuItemContinue_Click(object sender, EventArgs e) {
timer1.Enabled = true;
ToolStripMenuItemPause.Enabled = true;
ToolStripMenuItemContinue.Enabled = false; }
privatevoid Form1_KeyDown(object sender, KeyEventArgs e) {
if (game.snake.direction == Direction.Down || game.snake.direction == Direction.Up) {
switch (e.KeyCode) { caseKeys.Left:
game.snake.direction = Direction.Left; break;
caseKeys.Right:
game.snake.direction = Direction.Right; break;
} } else
{
switch (e.KeyCode) { caseKeys.Up:
game.snake.direction = Direction.Up; break;
caseKeys.Down:
game.snake.direction = Direction.Down; break;
} } } } }
7.测试报告
测试用例
1 Bean 的生成与显示
1) 测试程序是否能在游戏开始时,生成一颗豆。 2) 测试程序是否能在游戏运行中,正常显示一颗豆。
3) 测试程序是否能在豆被蛇吃掉时,消除原先的豆,并重新 生成一颗豆。
2 Snake 的生成、显示、移动与生长
1) 测试程序是否能在游戏开始时,生成一条蛇。
2) 测试程序是否能在游戏运行中,正常显示一条蛇的运动。 3) 测试程序是否能在游戏运行中,根据用户的按键情况,改 变蛇的移动方向。
4) 测试程序是否能在蛇吃掉豆时,生长一节。 5) 测试程序是否能在蛇头碰到蛇身时,咬断蛇身。
6) 测试程序是否能在蛇头碰到场地边界时死亡,并结束游戏。 测试结果
8.心得体会
通过这三周的实训,我发现自己对所学知识还不太熟练,特别是自己动手做的时候,甚至有些知识点还不太懂,还有,自己太过于马虎,总是在不该出错的地方出错。最让我受益匪浅的是,这次实训让我学会了不要眼高手低,要勤于练习,勇于实践,只有通过练习和实践才能真正的记住自己所学的知识。
正在阅读:
停车场贪吃蛇游戏实训报告01-03
基础会计实训报告结果与分析08-14
横向弯曲的格形构件桁架08-26
敏感性分析(上课正式版)11-26
最新部编本北师大六年级数学上册(第一学期)期末试卷3-精选资料,绝对有用12-06
超级学习为语文教学插上腾飞的翅膀12-27
五里店小学安全生产月活动总结2012.604-26
拆迁住宅用途房地产分户价格估价报告05-28
商院关注:中国17位身价过亿女富豪身世12-14
现场工程安装安全知识题库09-12
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 贪吃
- 停车场
- 报告
- 游戏
- 低压集中抄表工程现场竣工验收大纲
- 金凤煤矿厚煤层无煤柱开采应用研究实施方案(8) - 图文
- 小学数学五年级上册培优补差记录表
- 操作系统磁盘调度算法及模拟实验三
- 五年级上册音乐知识点
- 钢筋施工方案6.24
- 专题作文写作知识,序列化教学研究
- 2018-2024年中国婚庆市场全景调查与未来前景预测报告(目录) - 图文
- 凤凰大视野全部节目(2004-2012)
- 沪教版化学九年《(期中)》word同步测试题
- 二年级看图写话范文大全
- 在初三部分尖子生座谈会上的讲话
- 影响锤片式粉碎机工作性能的主要因素
- PEP小学英语五年级上册第五单元第四课时教学案例
- 对外经济贸易大学金融硕士复试指导建议推荐阅读
- 电与磁讲义1
- 努力地把自己培养成为金驰有用的人才
- 舟山市普陀区人代会“十二五”规划纲要(印刷稿)
- 瓦尔登湖的读后感
- 数字温度计开题报告 - 图文