文档库 最新最全的文档下载
当前位置:文档库 › 贪吃蛇实训报告

贪吃蛇实训报告

贪吃蛇实训报告
贪吃蛇实训报告

郑州轻工业学院实训报告

实训名称:贪吃蛇

指导教师:

姓名:

学号:

班级:

提交日期:

一.实验目的

通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发。

二.实验题目

本次实训的题目为贪吃蛇。通过使用C#编程语言来实现。

三.功能描述

1.游戏的基本功能描述

1)游戏场地是一片矩形区域的空地构成,蛇可以在这片定义的区

域中自由移动。

2)定义一个Block来构成石块,蛇头,蛇身以及豆。蛇由蛇头和

蛇身组成。

3)当游戏开始之后,定义的区域中出现一颗豆和一条蛇,并且蛇

不停地移动,蛇移动的方向与蛇头的方向一致。

4)通过space或者暂停键可以使游戏停止,蛇停止移动,分数停

止积分。

5)当蛇移动时,玩家可以使用“↑”、“↓”、“←”和“→”四个方向键改变蛇

的移动方向。

6)当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成

一颗新的豆,蛇身增加一节。

7)当蛇头碰到石块时,蛇死亡,游戏结束。

8)当蛇头咬到蛇身时,则蛇死亡,游戏结束。

9)当蛇头碰到草坪四周时,蛇立即毙命,游戏结束。

10)游戏分为不同的级别,第一关游戏速度为200,当蛇吃五个

豆子就可以过关,级别显示为2,速度增加100变为300.第二

关为吃够10个豆子,速度增加50,以后以此类推。

11)游戏菜单中设有游戏帮助,玩家可以通过点击帮助了解游戏

的玩法。

12)对于不是第一次玩的玩家可以改变蛇的运动速度,来增加难

度。在菜单中设有加速和减速两个键,单击可以改变速度。

13)游戏菜单中还有时间显示。

14)当游戏暂停时,可以通过“继续”键使游戏继续进行。

四.需求分析

本游戏用户可以自己练习和娱乐。本游戏需要满足以下几点要求:

(1)利用方向键“↑、→、←、→”来改变蛇的运行方向。

(2)空格键暂停游戏,并在随机的地方产生食物。

(3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则

正常运行。

可行性分析:

贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。

贪吃蛇的核心算法是如何实现蛇的移动和吃掉食物后如何变成新的蛇体。没有碰到食物的时候,把当前运动方向上的下个节点入队,

并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效果。而在吃到食物的时候,则只需把食物入队即可。实现贪吃蛇的基本的蛇身移动、吃到食物身体增长、和碰到墙壁或自身死亡,能够暂停和开始。玩家可以根据自己的水平选择不同的级别进行游戏挑战。

贪吃蛇游戏中定义如下:

1) 空白区域(Lawn):定义的区域是贪吃蛇游戏的场地。豆、石头和蛇只能存在于空白区域的范围之内。根据个人爱好还可以添加背景,改变区域的大小和颜色。

2) 蛇(Snake):在贪吃蛇游戏中,蛇由若干节组成,其中第一节是蛇头,在蛇头上面定义两个点,作为蛇的眼睛,其余是蛇身。在游戏过程中,有且仅有一条蛇,并且蛇在不停地移动。如果蛇吃了豆,则蛇生长一节。如果蛇头碰到蛇身,蛇死亡,游戏结束。如果蛇头离开所定义的区域,则蛇死亡游戏结束。当蛇头撞到定义的石块上的时候游戏结束。在定义蛇的时候可以改变蛇的初始长度,也可以改变蛇的颜色和大小。

3) 豆(Bean):在贪吃蛇游戏中,豆是蛇的食物。在游戏过程中,有且仅有一颗豆。如果蛇吃了豆,则重新生成一颗豆。豆的出现是随机性的。

4)石块(stone):游戏中石块和豆是同时出现的,不同的是,豆是随机产生的,而石块是固定的,它的坐标在写代码的时候就定义好了,不能够改变。它的大小和颜色也可以随便的改变。

5)菜单(MenuStrip):在贪吃蛇游戏中有游戏菜单,里面有开局、暂停、继续、加速、减速、帮助等菜单。还有Label控件,显示速度、时间、日期和积分的。

五.设计说明

Snake的每一节都有位置和大小等属性。而Bean和stone也具有这两个属性。抽象出这三者的共同特征,抽象出一般类Block,用于描述一个块。Block派生出Bean和SnakeBlock两个类,其中SnakeBlock 类用于描述蛇的一节。

为了使游戏的运行更易于控制,定义Game类用于启动、暂停和继续游戏。

根据需求分析可知,Lawn仅包含大小和颜色两个属性。为了减少类的数量,可将其大小和颜色等属性添加到Game类中。

综上所述,在贪吃蛇游戏中,有Block(块)、Bean(豆)、SankeBlock (节)、Snake(蛇)、Game(游戏)和MainForm(用户接口)六个类。

游戏逻辑构思图如下:

重新开

游戏的设计如下:

六.源代码

using System;

using System.Collections.Generic;

using https://www.wendangku.net/doc/3715197958.html,ponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

public partial class MainForm : Form

{

int a = 200;//定义初速度为200

private Game game;//

DateTime c;

public MainForm()

{

InitializeComponent();

game = new Game(lawn.Width, lawn.Height);

timer1.Enabled = true;

timer1.Interval = a;

timer1.Enabled = false;

Velocity.Text = a.ToString();

}

Block是用来构成Bean(豆)和Snake(蛇)还有Stone(石块)的最基本的单位,是Bean和SnakeBlock的基类。Block类的参考代码如下。

class Block

{

protected Point origion; //Block的左上顶点

public const int WIDTH = 10; //Block的宽度

public const int HEIGHT = 10; //Block的高度

protected Color color; //Block的颜色

public Block()

{

origion = new Point(0, 0);

color = new Color();

}

public Block(int x, int y, Color _color)

{

origion = new Point(x, y);

color = _color;

}

public Point Origion

{

get

{

return origion;

}

}

public void Display(Graphics g)

{

SolidBrush brush = new SolidBrush(color);

g.FillRectangle(brush, origion.X, origion.Y, WIDTH, HEIGHT);

Pen pen = new Pen(Color.Black);

g.DrawRectangle(pen, new Rectangle(origion.X, origion.Y, WIDTH - 1, HEIGHT - 1));

}

public void Clear(Graphics g, Color backGroundColor)

{

SolidBrush brush = new SolidBrush(backGroundColor);

g.FillRectangle(brush, origion.X, origion.Y, WIDTH, HEIGHT);

}

}

这是对豆的定义,是由Block派生而来的,在系统开始时,使豆产生,它的出现位置为随机生成。其代码如下:

class Bean : Block

{

public static int f = 0;//吃到豆子的个数

public Bean(Color _color)

{

origion = new Point(0, 0);

color = _color;

}

public void Creat(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight, Snake snake)

{

Clear(g, backGroundColor);

bool bGetAPosition = false; //是否找到生成豆的位置

Random random = new Random();

while (!bGetAPosition)

{

origion.X = random.Next(0, lawnWidth - 1) / WIDTH * WIDTH;

origion.Y = random.Next(0, lawnHeight - 1) / HEIGHT * HEIGHT;

int i;

for (i = 0; i < snake.Length; i++)

{

if (origion == snake.blocks[i].Origion)

break;

}

if (i == snake.Length)

bGetAPosition = true;

}

Display(g);

f++;

}

new public void Display(Graphics g)

{

SolidBrush brush = new SolidBrush(color);

g.FillRectangle(brush, origion.X, origion.Y, WIDTH, HEIGHT);

Pen pen = new Pen(Color.Black);

g.DrawRectangle(pen, new Rectangle(origion.X, origion.Y, WIDTH - 1, HEIGHT - 1));

}

//Display(g);

}

SnakeBlock表示蛇的一节,是由Block派生而来的。它组成蛇身,其代码如下所示:

class SnakeBlock : Block

{

private bool isHead;

public bool IsHead

{

get

{

return isHead;

}

public SnakeBlock(int x, int y, Color _color, bool _isHead)

{

origion = new Point(x, y);

color = _color;

isHead = _isHead;

}

public void ChangeHeadToBody()

{

if (isHead)

isHead = false;

}

public void Display(Graphics g, Direction direction)

{

base.Display(g);

if (isHead)

{

//绘制蛇眼

SolidBrush brush = new SolidBrush(Color.Black);

switch (direction)

{

case Direction.Up:

case Direction.Down:

g.FillRectangle(brush, origion.X + WIDTH / 4, origion.Y + HEIGHT / 2, 2, 2);

g.FillRectangle(brush, origion.X + WIDTH / 4 * 3, origion.Y + HEIGHT / 2, 2, 2);

break;

case Direction.Left:

case Direction.Right:

g.FillRectangle(brush, origion.X + WIDTH / 2, origion.Y + HEIGHT / 4, 2, 2);

g.FillRectangle(brush, origion.X + WIDTH / 2, origion.Y + HEIGHT / 4 * 3, 2, 2);

break;

}

}

}

}

控制蛇头运动的方向

public enum Direction

{

Down,

Left,

Right

};

对蛇的编码也是由Block派生而来的,在这里面可以定义蛇的颜色和长度。

class Snake

{

public static bool eatebean;

private int length;

public Direction direction;

private Color color;

public List blocks;

private const int INIT_LENGTH = 10;

public int Length

{

get

{

return length;

}

}

public Snake(Color _color, Direction _direction)

{

direction = _direction;

color = _color;

blocks = new List();

}

public void Creat(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight)

{

Clear(g, backGroundColor);

blocks.Clear();

length = INIT_LENGTH;

int x;

int y;

Random random = new Random();

x = random.Next(lawnWidth / 4, lawnWidth / 4 * 3) / Block.WIDTH * Block.WIDTH;

y = random.Next(lawnHeight / 4 - 1, lawnHeight / 4 * 3) / Block.HEIGHT * Block.HEIGHT;

blocks.Add(new SnakeBlock(x, y, color, true));

蛇运动的方向控制

switch (direction)

{

case Direction.Up:

for (int i = 1; i < length; i++)

{

blocks.Add(new SnakeBlock(x, y + Block.HEIGHT * i, color, false));

}

break;

case Direction.Down:

for (int i = 1; i < length; i++)

{

blocks.Add(new SnakeBlock(x, y - Block.HEIGHT * i, color, false));

}

break;

case Direction.Left:

for (int i = 1; i < length; i++)

{

blocks.Add(new SnakeBlock(x + Block.WIDTH * i, y, color, false));

}

break;

case Direction.Right:

for (int i = 1; i < length; i++)

{

blocks.Add(new SnakeBlock(x - Block.WIDTH * i, y, color, false));

}

break;

}

Display(g);

}

public void Grow()

{

int x = 2 * blocks[blocks.Count - 1].Origion.X - blocks[blocks.Count - 2].Origion.X;

int y = 2 * blocks[blocks.Count - 1].Origion.Y - blocks[blocks.Count - 2].Origion.Y;

blocks.Insert(length, new SnakeBlock(x, y, color, false));

length++;

}

public void Move()

{

int x = 0;

int y = 0;

blocks[0].ChangeHeadToBody();

switch (direction)

{

case Direction.Up:

x = blocks[0].Origion.X;

y = blocks[0].Origion.Y - Block.HEIGHT;

break;

case Direction.Down:

x = blocks[0].Origion.X;

y = blocks[0].Origion.Y + Block.HEIGHT;

break;

case Direction.Left:

x = blocks[0].Origion.X - Block.WIDTH;

y = blocks[0].Origion.Y;

break;

case Direction.Right:

x = blocks[0].Origion.X + Block.WIDTH;

y = blocks[0].Origion.Y;

break;

}

blocks.Insert(0, new SnakeBlock(x, y, color, true));

blocks.RemoveAt(blocks.Count - 1);

}

public void Display(Graphics g)

{

for (int i = 0; i < length; i++)

{

blocks[i].Display(g, direction);

}

}

public void Clear(Graphics g, Color backGroundColor)

{

for (int i = 0; i < length; i++)

{

blocks[i].Clear(g, backGroundColor);

}

}

public void RemoveAfter(Graphics g, Color backGroundColor, int blockNum) {

for (int i = length - 1; i > blockNum - 1; i--)

{

blocks[i].Clear(g, backGroundColor);

blocks.RemoveAt(i);

length = blockNum;

}

}

石块的定义定义如下,在空白区域中定义一个位置(坐标),使之固定不动,在蛇头撞到这个坐标的时候,参数传到判断蛇生死的函数,时蛇死亡,游戏结束。

public bool MeetStone(Point origion)

{

if ((blocks[0].Origion.X == (origion.X + 40) && blocks[0].Origion.Y == (origion.Y + 40)) || (blocks[0].Origion.X == (origion.X + 300) &&

blocks[0].Origion.Y == (origion.Y + 80)) || (blocks[0].Origion.X == (origion.X + 150) && blocks[0].Origion.Y == (origion.Y + 200))||

(blocks[0].Origion.X == (origion.X + 100) && blocks[0].Origion.Y == (origion.Y + 400)))

return true;

else

return false;

}

当蛇碰到一个豆时,使豆成为蛇体的一部分,其颜色和大小跟蛇一样,蛇身增加。

public bool CanEatBean(Bean bean)

{

if (blocks[0].Origion == bean.Origion)

return true;

else

return false;

}

public int CanEatSnake()

{

for (int i = 3; i < blocks.Count; i++)

{

if (blocks[0].Origion == blocks[i].Origion)

return i;

}

return 0;

}

public void EatBean(Bean bean, Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight)

{

bean.Clear(g, backGroundColor);

Grow();

bean.Creat(g, backGroundColor, lawnWidth, lawnHeight, this);

eatebean = true;

}

public bool IsAlive(int lawnWidth, int lawnHeight)

{

if (blocks[0].Origion.X < 0)

return false;

if (blocks[0].Origion.Y < 0)

return false;

if (blocks[0].Origion.X + Block.WIDTH > lawnWidth)

return false;

if (blocks[0].Origion.Y + Block.HEIGHT > lawnHeight)

return false;

else

return true;

}

}

Game控制游戏的运行,负责在游戏开始时生成Bean、Stone和Snake,以及负责在游戏运行中Snake的移动、Snake的生长、Bean的重生和石块的生产。并随时检测Snake的生死状态。Game类的参考代码如下:

class Game

{

Point origion;

public Snake snake;

public Bean bean;

public bool isSnakeAlive;

public int lawnWidth;

public int lawnHeight;

public Game(int _lawnWidth, int _lawnHeight)

{

Random random = new Random();

int x = random.Next(0, _lawnWidth - 1) / Block.WIDTH * Block.WIDTH;

int y = random.Next(0, _lawnHeight - 1) / Block.HEIGHT * Block.HEIGHT;

Direction direction = (Direction)random.Next(1, 4);

snake = new Snake(Color.Red, direction);

bean = new Bean(Color.Red);

isSnakeAlive = false;

lawnWidth = _lawnWidth;

lawnHeight = _lawnHeight;

}

public void Begin(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight)

{

isSnakeAlive = true;

snake.Clear(g, backGroundColor);

snake.Creat(g, backGroundColor, lawnWidth, lawnHeight);

bean.Creat(g, backGroundColor, lawnWidth, lawnHeight, snake);

游戏中石块的填充,可以根据自己制定的坐标来固定石块,可以改变其颜色。

SolidBrush brush = new SolidBrush(Color.DarkViolet);

Pen pen = new Pen(Color.DarkViolet);

g.FillRectangle(brush, origion.X + 40, origion.Y + 40, 10, 10);

g.DrawRectangle(pen, new Rectangle(origion.X + 40, origion.Y + 40, 10,

10));

g.FillRectangle(brush, origion.X + 300, origion.Y + 80, 10, 10);

g.DrawRectangle(pen, new Rectangle(origion.X + 300, origion.Y + 80, 10,

10));

g.FillRectangle(brush, origion.X + 150, origion.Y + 200, 10, 10); g.DrawRectangle(pen, new Rectangle(origion.X + 150, origion.Y + 200, 10, 10));

g.FillRectangle(brush, origion.X + 100, origion.Y + 400, 10, 10); g.DrawRectangle(pen, new Rectangle(origion.X + 100, origion.Y + 400, 10, 10));

}

public void OnTime(Graphics g, Color backGroundColor, int lawnWidth, int lawnHeight)

{

if (isSnakeAlive)

{

snake.Clear(g, backGroundColor);

snake.Move();

snake.Display(g);

bean.Display(g);

if (snake.CanEatBean(bean))

{

bean.Clear(g, backGroundColor);

snake.EatBean(bean, g, backGroundColor, lawnWidth, lawnHeight);

bean.Display(g);

}

int blockNum = snake.CanEatSnake();

if (blockNum > 0)

{

snake.RemoveAfter(g, backGroundColor, blockNum);

isSnakeAlive = false;

MessageBox.Show("就算再饿也不能咬自己啊,死了吧!");

}

if (!snake.IsAlive(lawnWidth,

lawnHeight)||snake.MeetStone(origion))

isSnakeAlive = false;

}

}

}

Timer组件用于在用户定义的时间间隔引发事件。在游戏的运行过程中,通过时间函数可以判断蛇的生死,蛇吃豆子的多少。还有日期的显示,时间的显示。统计蛇吃豆子的多少。当吃够规定的豆的时候,级别增加,游戏的速度增加,蛇运动速度增加。

private void timer1_Tick(object sender, EventArgs e)

{

Date.Text = DateTime.Today.ToLongDateString();

time.Text = DateTime.Now.ToLongTimeString();

Success.Text = (Bean.f *10).ToString();

if (Bean.f == 5)

{

jibie.Text = (1 + (Bean.f + 1) % 5).ToString();

timer1.Enabled = true;

timer1.Interval = 100;

Velocity.Text = (a + 100).ToString();

}

if (Bean.f == 10 )

{

jibie.Text = (2 + (Bean.f + 1) % 10).ToString();

timer1.Enabled = true;

timer1.Interval = 80;

Velocity.Text = (a + 150).ToString();

}

if (Bean.f == 20)

{

jibie.Text = (3 + (Bean.f + 1) % 20).ToString();

timer1.Enabled = true;

timer1.Interval = 70;

Velocity.Text = (a + 200).ToString();

}

if (Bean.f == 30)

{

jibie.Text = (3 + (Bean.f + 1) % 30).ToString();

timer1.Enabled = true;

timer1.Interval = 60;

Velocity.Text = (a + 250).ToString();

}

if (Bean.f == 40)

{

jibie.Text = (3 + (Bean.f + 1) % 40).ToString();

timer1.Enabled = true;

timer1.Interval = 50;

Velocity.Text = (a + 300).ToString();

}

if (Bean.f == 50 )

{

MessageBox.Show("闯关成功!");

}

判断蛇的生死

if (game.isSnakeAlive)

{

Graphics g;

g = lawn.CreateGraphics();

game.OnTime(g, lawn.BackColor, lawn.Width, lawn.Height);

if (!game.isSnakeAlive)

{

MessageBox.Show("死翘翘!");

jibie.Text = 1.ToString();

}

}

}

游戏的开始按钮,游戏开始,对的数据都初始化,其中有timer 函数,以及级别,分数都初始化,蛇的运行速度也初始到原来的速度。豆的统计清零。

private void 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;

Bean.f = 0;

timer1.Interval = 200;

Velocity.Text = a.ToString();

c= DateTime.Now;

}

private void ToolStripMenuItemPause_Click(object sender, EventArgs e)

贪吃蛇测试分析报告

贪吃蛇 测试分析报告 开发小组成员:

目录 1.引言————————————————————— 4 1.1编写目的—————————————————— 4 1.2项目背景—————————————————— 4 1.3定义———————————————————— 4 1.4参考资料—————————————————— 5 2.测试概要————————————————————5 3.测试结果及发现—————————————————6 3.1游戏方面——————————————————6 3.2界面菜单测试————————————————9 4.对软件功能的结论————————————————11 4.1游戏运行方面————————————————11 4.1.1能力—————————————————

11 4.1.2限制—————————————————11 4.2界面设置方面————————————————11 4.2.1能力————————————————— 11 4.2.2限制—————————————————11 5.分析摘要————————————————————12 5.1能力————————————————————12 5.2缺陷和限制—————————————————12 5.3建议————————————————————12 5.4评价————————————————————12 6.测试资源消耗——————————————————12

1.引言 1.1编写目的: 明白用户需求,为系统设计和编码人员提供依据,查找项目中存在的错误及可能存在的错误,完善软件不足的地方,提升软件的部分功能、性能。 1.2项目背景: 软件项目名称:贪吃蛇游戏 1.用户需要开发一款命名为贪吃蛇的休闲小游戏 2.开始游戏时,存在一条向右运动的小蛇和蛇需要吃掉的豆 3.用户通过键盘的“上下左右”键控制小蛇分别向“上下左右” 运动来吃掉豆,同时增加自身的长度 4.小蛇吃掉游戏规定数量的豆后,游戏结束 5.游戏分为初级、中级、高级 6.小蛇不能碰到边界 7.小蛇自身不能碰撞 8.游戏可以暂停和重新开始 9.游戏完成后计算所得分数 10.游戏在任何时候都可以退出 1.3定义 1):块 一条蛇可以看成由许多正方形的“小格子”拼凑成,称作块。块

贪吃蛇游戏课程设计实验报告全解

辽宁科技大学课程设计说明书 设计题目:基于C#的贪吃蛇游戏 学院、系:装备制造学院 专业班级:计算机科学与技术 学生姓名:叶佳佳 指导教师:丁宁 成绩: 2015年12月12日

目录 一、概述 (1) 1、用C#实现该设计的方法 (1) 2、贪吃蛇游戏说明 (1) 二、实验目的及设计要求 (1) 1、实验目的 (1) 2、实验要求 (2) 三、课程设计具体实现 (2) 1、概要设计 (2) 1.1、设计思想 (2) 1.2、主模块实现 (2) 1.3、主函数流程图 (4) 2、详细设计 (5) 2.1、设计思想 (5) 2.2、具体模块实现: (5) 四、调试过程及运行结果 (10) 1、调试过程 (10) 2、实验结果 (11) 五、实验心得 (12) 六、参考资料 (13) 七、附录:源代码 (13)

一、概述 1、用C#实现该设计的方法 首先应该了解设计要求,然后按照功能设计出实际模块,每个模块都要完成特定的功能,要实现模块间的高内聚,低耦合。设计模块是一个相当重要的环节,模块的数量不宜太多,也不宜太少,要是每个模块都能比较简单的转换成流程图。模块设计完成后,就该给每个模块绘制流程图。流程图要尽可能的简单且容易理解,多使用中文,补一些过长的代码,增加理解难度。此外,流程图应容易转换成代码。 根据流程图编写好代码后在WindowsXP操作系统,https://www.wendangku.net/doc/3715197958.html,2008开发环境下进行运行测试,检查错误,最终设计出可行的程序。 2、贪吃蛇游戏说明 游戏操作要尽可能的简单,界面要尽可能的美观。 编写程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜欢的游戏:一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被吃掉,这时蛇的身体长一节,同时计10分;接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁、障碍物或身体交叉(蛇头撞到自己的身体),则游戏结束。游戏结束时输出相应得分。 具体要求有以下几点: (1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; (2)系统设计要实用,采用模块化程序设计方法,编程简练、可用,功能全面; (3)说明书、流程图要清楚; 二、实验目的及设计要求 1、实验目的 .NET课程设计是教学实践环节中一项重要内容,进行此课程设计旨在掌握基础知识的基础上,进一步加深对VC#.NET技术的理解和掌握; 提高和加强学生的计算机应用及软件开发能力,使学生具备初级程序员的基本素质; 培养学生独立分析问题、解决问题、查阅资料以及自学能力,以适应信息管理行业日新 1

贪吃蛇小游戏实验报告[

软件设计报告 设计题目:贪吃蛇 学院:华北电力大学科技学院 专业班级:软件10K1 学生姓名:张飞 学生学号:101909020122 指导教师:乔玲玲 提交时间: 成绩: - 0 -

目录 一.需求分析 二.概要设计 三.详细设计 四.心得体会 一.需求分析 1.1关于题目 1.1.1题目要求 利用Microsoft Visual C++制作一个贪吃蛇的小游戏,要求: (1)应用MFC单文档制作 (2)能够记录游戏成绩 (3)可根据玩家要求设置游戏速度(级别):初级,中级,高级 (4)可以根据个人喜好更换背景图片,食物图片,障碍物图片,结束图片等 1.1.2选题背景 贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我们,它的制作方法对于以前的我们而言都是很神秘的。我们希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我们的编程能力不是很强,但是我们有信心,在这次学习中我们将从实践和实际的项目中提高自己的编程能力。因此我们选定了这个题目。 1.2关于编译软件 本程序采用Microsoft Visual C++6.0的英文版本进行编译。VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程工具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界面和可操作性,加上支持标准C/C++规范,但仍有相当多的编程人员使用VisualC++6.0进行应用系统的开发。 - 1 -

- 2 - 1.3关于兼容性 本程序经过调试,可以在XP 系统下编译运行,也可以在Vista 下运行,界面稍有不同,但不影响运行结果。 二. 概要设计 2.1软件主要功能设计 2.1.1程序结构 根据分析,贪吃蛇这个程序一共要实现如下几个功能,包括游戏方面开始游戏、停止游戏,设置游戏级别(速度),设置图片等。具体的程序结构如下面的图1-1所示。 图2-1 贪吃蛇结构图 2.1.2程序流程 根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程。贪吃蛇的内容主要包括: 游戏开始,随机出现食物。 贪吃蛇 游 戏开始 游戏设置 游戏结束 开始 初级 中级 高级 结束

《贪吃蛇游戏课程设计》报告资料整理

贪吃蛇游戏程序设计 一、课程设计任务 贪吃蛇小游戏程序设计 二、设计要求 通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。 (1).收集资料,分析课题,分解问题,形成总体设计思路; (2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍; (3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行; (4).完成课程设计报告,并进行答辩 三、需求分析 3.1、程序功能 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。

3.2、设计思想 程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。

3.3、流程图

四、设计的具体实现 (1)函数定义 函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用 #define N 200 #define M 200 #include"graphics.h" #include #include #include #include #include #include #include #define LEFT 97//A #define RIGHT 100//D #define DOWN 115//S #define UP 119//W #define Esc 0x011b int i,key; int score=0; int gamespeed=250;//游戏速度可根据实际情况自行调整 struct Food { int x;//食物的横坐标 int y;//食物的纵坐标 int yes;//判断是否要出现食物的变量 }food;//食物的结构体 struct Snake { int x[M]; int y[M]; int node;//蛇的节数 int direction;//蛇的移动方向 int life;//蛇的生命,0表示活着,1表示死亡 }snake; void Init();//图形驱动

贪吃蛇实验报告

创作编号: GB8878185555334563BT9125XW 创作者:凤呜大王* 《计算机程序设计》课程设计报告课题名称贪吃蛇游戏 班级 学号 姓名 指导教师 设计时间至 设计地点 常熟理工学院计算机科学与工程学院

常熟理工学院计算机科学与工程学院 目录 1 需求分析 (1) 2 系统分析和设计 (1) 2.1 数据结构的设计和选择的理由 (1) 2.2 系统模块划分和模块结构 (2) 2.3 流程图 (2) 2.4 数据类型、全局变量和函数说明 (3) 3 程序测试和运行结果 (4) 4 课程报告小结 (5) 4.1分数重叠显示 (5) 4.2速度太快 (5) 4.3食物可能出现在蛇身上 (5) 附录A:程序源代码 (6)

《C程序设计》课程设计 1 需求分析 【阐述课程设计应该完成的功能】 使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。 2 系统分析和设计 2.1 数据结构的设计和选择的理由 本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。 2.1.1从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。下面以数组方式为例: struct Point { int x, y; } struct Point nodes[MAX_LENGTH]; //蛇身数组,MAX_LENGTH为最大蛇长 贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点: 1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用int direction;表示) 2. 运动时,蛇身后面一节移动到前面一节的位置。当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。 3. 吃到一个食物以后,蛇身会增加一节。即该数组中的有效数据个数加一。(用int length;表示) 根据上面的情况,我们可以设计蛇的数据结构如下: struct Snake { struct Point nodes[MAX_LENGTH]; //蛇身数组,保存每节蛇身的坐标。MAX_LENGTH为最大蛇长 int length; //当前蛇长 int direction; //蛇头运动方向 int live; //蛇活的,还是已经死了? } 2.1.2 关于食物,有两个属性: 1. 坐标位置 2. 状态:存在,或被吃。 故我们用以下结构表示: struct Food { struct Point position; //食物的位置 int exist; //存在?还是被吃? } 1

VC实现贪吃蛇的实验报告

题目:利用VC++实现贪吃蛇小游戏

一、题目:利用VC++实现贪吃蛇小游戏 利用VC++实现的贪吃蛇小游戏更加注重可视化。一条蛇在封闭的围墙内,在围墙内会随机出现一个食物,通过键盘上的W S A D四个键控制它向上,下,左,右四个方向移动。当蛇头撞到食物时表示将食物吃掉,这时蛇身增长一节,得分加一。接着随机生成食物,等待被蛇吃掉。如果在移动过程中撞到墙壁或者自己的身体,则游戏结束。游戏过程中,可以在菜单中选择暂停或者结束游戏,对游戏进行暂停或者退出。

二、编程要点(或基本思路、算法分析与说明): 本次游戏设计包含两大模块,一个模块是贪吃蛇游戏本身算法的设计,完成了贪吃蛇的食物产生,获取食物,蛇的移动等功能。另一个模块是利用MFC完成贪吃蛇的可视化显示,产生了一个对话框,在对话框可以控制游戏及游戏的显示。 1.贪吃蛇游戏算法设计包括: <1>果实出现的设计思路: (1)采用随机数生成果实出现坐标 (2)判断当前生成的果实是否在贪吃蛇身体范围内。 (3)如果在,重新生成直到不在为止。如果不在,则把坐标位置返回给调用对象。 <2>贪吃蛇更新的算法设计 (1)接收玩家按下的方向键消息,并保存到方向变量中。 (2)定义一个时间定时器,用来控制蛇运动的速度。 (3)当每次时间间隔到达时,则根据方向变量来更新贪吃蛇curr(即贪吃蛇身体)向量。 (4)判断curr向量的第一个元素中的坐标数据是否碰到边界或者蛇身,如果有,则游戏结束。否则,进行下一步。 (5)判断curr向量的第一个元素中的坐标数据是否与当前果实重合,如果有,表示贪吃蛇已经吃到果实。这时就向贪吃蛇curr向量添加一个元素,并重新生成一个果实。 (6)吃到食物后,得分会同步增加。 2.利用MFC完成贪吃蛇的可视化显示: 首先初始对话框,完成游戏的整体框架的显示。然后游戏玩家在菜单栏里选择开始,暂停,结束等,控制游戏状态。游戏开始后,玩家通过键盘上的消息控制蛇的运动。在函数DrawSnake(CDC *pDC,Snake snake),和DrawFood(CDC *pDC,SnakeFood f)完成对蛇和食物的重绘,从而显示出蛇的运动和对食物的获取。在OnPaint()函数中完成得分和游戏操作提示的显示。 本次游戏设计的主要功能函数如下: OnGameStart()(游戏开始函数), OnGamePauseStart()(游戏暂停函

贪吃蛇游戏程序设计实验报告

Windows编程大作业贪吃蛇设计与实现 学校:武汉轻工大学 院系: 班级: 姓名: 学号:

2015 年12月16日 目录 一、题目介绍 二、设计目的 三、详细设计 3.1贪吃蛇本体设计 3.2贪吃蛇食物设计 3.3游戏界面设计 3.3.1游戏初始化 3.3.2游戏开始 3.3.3游戏暂停 3.3.4游戏退出 3.3.5游戏总界面 3.3.6游戏区域与背景 3.3.7关于SNAKE 3.4玩法规则设计 3.5核心设计 四、功能测试 五、总结 六、参考文献

一、题目介绍: 编写一个基于MFC的小游戏。 基本要求: 1、实现一个小游戏 2、实现基本游戏控制功能 3、具有游戏数据保存功能 4、界面布局合理、美观; 二、设计目的: 通过使用vc++6.0实现一个小游戏的课程设计,进一步掌握MFC的高级使用方法和锻炼自己动手写程序的能力。了解游戏设计的整个过程,通过熟练使用MFC来设计游戏。程序主要包括:游戏界面设计,游戏菜单栏设计,游戏初始化,游戏控制等。培养和锻炼开发游戏的能力。 三、详细设计 3.1贪吃蛇的本体设计 贪吃蛇的头部拥有一个坐标(x,y),蛇体有一个长度len,蛇有一个运动方向direct,故定义一个结构体如下: struct Snake { int x,y; int len; int direct; }Snake[50]; 3.2贪吃蛇食物设计 贪吃蛇的食物有一个坐标(x,y),此食物有一个标志isfood,当isfood为0时,表示食物还没被吃,为1时,表示被吃。 struct Food { int x; int y; int isfood; }Food;

贪吃蛇游戏报告书

青岛大学软件技术学院交互式游戏设计实践实训题目名称贪吃蛇 姓名 专业数字媒体艺术 班级 10级3班 指导教师解新峰 2014 年 1 月 14 日 1

目录 第一章引言 (3) 1.1选题背景 (3) 1.2项目意义 (3) 1.3开发技术 (3) 1.3.1 Java语言简介 (3) 1.3.3 Eclipse开发环境 (3) 第二章贪吃蛇游戏概述 (5) 2.1游戏分析 (5) 2.1.1 游戏规则 (5) 2.1.2 游戏玩法 (5) 2.2算法分析 (5) 2.3架构分析 (5) 第三章贪吃蛇游戏的详细设计 (7) 3.1游戏总体结构设计 (7) 3.2 游戏运行图 (10) 小结 (13) 参考文献 (13)

第一章引言 1.1选题背景 贪吃蛇是家喻户晓的益智类小游戏,选择这个题目一是为了将自己的所学知识加以运用,二是一直以来贪吃蛇这个游戏就深深地吸引着我,它的制作方法对于以前的我而言都是很神秘的。我希望通过自己的所学知识把它剖析开来,真真正正的了解它的本质和精髓。虽然我的编程能力不是很强,但是我有信心,在这次学习中我将从实践和实际的项目中提高自己的编程能力。因此我选定了这个题目。 1.2项目意义 游戏在设计方面应该本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,应始终坚持清晰明了,在性能方面应能够实现效率高,不易出错等优点。游戏主界面应该力求美观,赏心悦目。游戏控制模块应做到易懂、易操作,而且准确率高,不易出错。 1.3开发技术 1.3.1 Java语言简介 Java是一种简单易用的编程语言,它采用了一种虚拟机作为中间层来屏蔽平台差异,能够实现跨平台运行。Java支持面向对象编程,有封装、继承、多态的特性,它还支持多线程,实现多个程序流程同时执行,完成不同任务。 1.3.2 Java语言的开发工具包JDK JDK(Java Development Kit)是Java语言的开发工具包,工具包里除了包含Java语言编译器、调试器以及演示程序以外,一般还会包含Java运行环境(Java Runtime Environment,JRE)。JRE是某一平台运行Java程序的软件环境,包括虚拟机(JVM)和核心类库等。 1.3.3 Eclipse开发环境 Eclipse是一个开放源代码的、基于Java的可扩展开发平台,是目前非常流行的跨平台的自由集成开发环境(IDE)。最初主要用于Java语言开发,但是目前也有人通过插件使其作为其他编程语言(如C++、PHP)的开发工具。Eclipse本身也只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 Eclipse本身核心非常小,其设计思想是“一切皆为插件”。其他功能都是基于插件的形式与Eclipse无缝结合,协同工作,如Eclipse的图形API、多国语言包等。在Eclipse

贪吃蛇暑期实训总结报告

实训报告 实训题目:贪吃蛇游戏程序设计 院系:计算机科学与工程学院 专业:网络工程 班级:网络工程131 学号:090213128 姓名: 指导教师:肖微 实训地点:九章楼N6-101 开课时间:2013 至2014学年第 2 学期常熟理工学院计算机科学与工程学院制

学生姓名周豪实训报告成绩 评语: 指导教师(签名) 年月日说明:指导教师评分后,实训报告交院办公室保存。

目录 1实训的目的和任务 (5) 实训的目的: (5) 实训的任务: (6) 2.开发环境(软件开发环境和硬件开发环境) (6) 3.界面设计 (6) 3.1设计思路 (6) 3.2实现原理 (7) 4.算法设计 (9) 5.程序流程 (30) 6.总结 (31) 1实训的目的和任务 实训的目的: 1.巩固和加深对C语言课程基本知识的理解和掌握 2.掌握C语言编程和程序调试的基本技能 3.利用C语言进行基本的程序设计 4.掌握书写程序设计说明文档的能力 5.提高运用C语言解决实际问题的能力 6. 进一步理解和运用结构化程设计的思想和方法

7.独立完成一个游戏的设计应用 实训的任务: 1.分析实训题目要求 2.了解实训要求内容 3.掌握实训要求代码 4.编写程序代码,调试程序使其能正确运行 5.设计完成的软件要便于操作和使用 6.完成课程设计报告,并进行答辩 2.开发环境(软件开发环境和硬件开发环境) 1、一台能正常运行的计算机电脑 2、Windows XP 3、Microsoft Visual Studio2010 4、Microsoft Word2010 3.界面设计 3.1设计思路: 大家在运行这个游戏的时候,开始界面能够出现一只蛇,这样的图案比较符合游戏的内容。首先是蛇图形的绘画,我们可以运用搜狗输入法轻松的绘出蛇的大致图像,但是值得大家注意的是搜狗直接生成的图形,在里面

单片机贪吃蛇课程设计报告模板

电气与信息工程学院 单片机课程设计报告 设计题目:基于单片机的贪吃蛇设计 2016 年11月22 日 一、设计任务及要求 基本功能: 制作一个8*8点阵的贪吃蛇游戏,系统以单片机的C语言的软件设计,系统通过LED

点阵屏为载体显示数据,并用五个输入端表示五个控制键(上下左右及加速)。系统硬件部分由STC89C52RC单片机,8*8点阵屏,5个按键,软件部分在keil环境下用C51语言编写,包括游戏初始化蛇的节数,以及障碍墙壁,游戏结束时自动复位。 具体要求: 1、用四个按钮控制贪吃蛇的行径,一个按钮控制贪吃蛇的加速,蛇的初始长度为2点,设置墙壁。 2、蛇吃到长度为1点的食物时,自身长度增加1点。 2、速度按钮带有一次加速,按两下速度按钮蛇的行进速度回到初始值。 3、当蛇碰到墙壁或自己的身体时游戏结束。 4、用proteus设计,仿真基于STC89C52RC单片机的8x8点阵贪吃蛇的硬件电路。 5、游戏结束,系统自动复位。 二、硬件电路设计 本系统以STC89C52RC为核心,设置12MHz的晶振,使得单片机有合理的运行速度。LED 点阵屏通过LED(发光二极管)组成,以灯珠亮灭来显示程序的运行情况,是模块化的显示组件,本设计采用8*8共阳红色点阵显示屏,用来显示贪吃蛇的游戏画面。五个独立按键控制蛇的游走方向(上下左右)和加速减速的功能。贪吃蛇是一款经典的小游戏,玩家通过按键操控贪吃蛇不断地吃食物,蛇身逐渐伸长,当蛇碰到蛇身和墙壁时游戏结束。 需要注意的是实际元件中,点阵的封装不尽相同,因此需要测试出每个引脚的功能,以便正确连线。注意,每个像素点的额定电压在3v左右,电压过大将会彻底损坏。

贪吃蛇游戏软件可行性分析报告

软件设计与体系架构实验报告 学院:计算机科学与技术学院 学号:0121210680330 姓名:郭烨华 班级:sy1201 课题名:贪吃蛇游戏开发

贪吃蛇开发并进行动态分析 指导老师:陈明俊 组员:李安福 郭烨华 分工明细 成员分工: 职责姓名任务 项目分析经理、程序员李安福可行性分析,系统功能分析,编程 系统设计师、程序员郭烨华概要设计,开发设计、编程 目录 一、引言 (1)

1.1编写目的 (1) 1.2 编写主题 (1) 1.3 游戏运行环境 (1) 二、可行性研究的前提 (1) 2.1游戏基本功能 (1) 2.2 要求 (3) 2.3目标 (3) 2.4 进行可行性研究的方法 (3) 2.5 评价尺度 (4) 三、对现有系统的分析 (4) 3.1 处理流程和数据流程: (4) 3.2 工作负荷 (4) 3.3 人员.................................................................................................. 错误!未定义书签。 3.4 设备 (4) 3.5局限性 (4) 3.6 改进要求 (5) 四、所建议的系统 (5) 4.1 对所建议系统的说明 (5) 4.2处理流程和数据流程 (5) 4.3改进之处 (6) 4.4 影响 (6) 4.4.1对设备的影响: (6) 4.4.3 对用户单位机构的影响 (6) 4.4.4 对系统运行过程的影响 (7) 4.4.5对地点和设施的影响 (7) 4.5 技术条件方面的可行性 (7) 五、可选择的其他系统方案 (7) 六、投资及效益分析 (8) 6.1支出 (8) 6.1.1 基本建设投资 (8) 6.1.2 其他一次性支出 (8) 6.1.3 非一次性支出 (8) 6.2 收益 (8) 6.2.1 一次性收益 (8) 6.2.2 非一次性收益 (8) 6.2.3 不可定量的收益 (8) 6.3 投资回收周期 (9) 6.4 敏感性分析 (9) 七、社会因素方面的可行性 (9) 7.1 法律方面的可行性 (9) 7.2 使用方面的可行性 (9) 八、结论 (9)

C语言课程设计报告——贪吃蛇源程序

C 语言课程设计 (小游戏贪吃蛇的程序设计报告)

设计人: 班级: 201 年月号

目录一:概述 1:研究背景及意义 2:设计的任务与需要知识点 3:具体完成设计内容 二:需求分析 1:功能需求 2:操作方法 三:总体设计 1:模块划分 2:数据结构设计 四:详细设计 1:主空摸块设计 2:绘制游戏界面 3:游戏的具体过程 4:游戏的结束处理 5:显示排行榜信息模块 五:程序的调试与测试 1:动画与音乐同步 2:蛇的运行 3:终止程序 六:结论 七::结束语 八:程序清单 九:参考文献

一.概述 本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以C 语言技术为基础,使用Turbo C++3.0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统的实现与测试。 1.1 研究的背景及意义 随着社会的发展,人们生活的节奏日益加快,越来越多的人加入了全球化的世界。人们不再拘泥与一小块天地,加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成为了人们的需要。此次课程设计完成的贪吃蛇小游戏,正是为了满足上述需求而设计出来的。贪吃蛇游戏虽小,却设计诸多的知识点。通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程的和那个发,技术和工具开发软件的过程,进一步掌握结构化,模块化的程序设计方法和步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构的使用方法,掌握图形,声音,随机数等多种库函数的使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程的学习和将来实际软件开发打下坚实的基础。 1.2 设计的任务和需要的知识点 1.2.1 课程设计主要完成的任务 1). 通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计的思想,培养解决实际问题的能力。 2) 有同步播放动画,声音效果。 3) 设计好数组元素与蛇,食物的对应关系。 4) 随机产生食物。 5) 有分数统计,排行榜,分数存储等功能。 通过此次课程设计,希望使读者能更深入的理解和掌握课程教学中的基本概念,培养读者应用基本技术解决实际问题的能力,从而进一步提高分析问题和解决问题的能力。 1.2.2需要掌握和运用的知识点 1.2.3本次课程设计需要掌握和运用如下的知识点: 1) 数组的应用。 2) 全局变量的使用。 3) 按键处理。 4)结构体的应用。 5)图形,音乐和动画的有关知识。 6)随即函数的使用。 7)文件的基本出操作。

MFC贪吃蛇实验报告

贪吃蛇实验报告201221143049 信计1212 许圣

1.概述 此次课程设计我利用MFC制作了一个贪吃蛇游戏,用户可以通过上下左右控制蛇的移动方向,游戏会根据贪吃蛇身体的长度自动增加难度。在游戏过程中,会记录运行时间和所得分数,我还添加了bmp格式的图片作为游戏背景。 2.功能描述 2.1设计思路 本软件主要由三个模块构成,它们分别是蛇运行模块,初始化处理模块和显示模块。它们的作用分别是,初始化处理:初始化蛇头位置与第一个点位置;蛇运行模块:控制蛇的上下左右运行,并对蛇的运行状态进行判断,根据(吃点、未吃点、死亡等)状态进行不同的子程序模块处理以及游戏者是否能晋级的判断;显示模块:根据对蛇和点子的当前状态进行动画显示。主要有以下步骤: 1.定义蛇类和食物类,初始化贪吃蛇各项成员变量,包括图像的出现在屏幕的 初始位置,长度,以及蛇的行走方向。食物类的定义包括出现的初始位置,以及食物是否被吃掉的判断。 2.用数组初始化长度为4的贪吃蛇,并且默认出现一个食物。 3.在CView类上运用MFC提供的Windows消息中WM_TIMER消息,运用OnTimer() 函数让系统提供一个时钟节拍,更新游戏 4.具体游戏实现,包括蛇撞到自己和围墙都将使游戏结束,判断吃豆等,其中 还包括根据蛇的长度来进行游戏难度的改变。 5.具体键盘游戏操作运用到Windows消息响应中的WM_KEYDOWN,用OnKeyDown() 来响应玩家的实际操作。 6.添加了bmp格式的图片作为游戏背景。 整体流程图如下图1。

图1:系统流程图

2.2功能介绍 ⑴运行程序,出现围墙界面,一条蛇在密闭的围墙内,在围墙内随机出现一个食 物,出现bmp格式图片的背景。 ⑵点击“游戏->游戏开始”,游戏开始。还可暂停游戏继续 ⑶游戏开始后,界面右下角会同步游戏得分。 ⑷通过四个方向键控制蛇的运动方向,吃掉随机出现的豆子,若不小心碰到墙 壁或者与自身相交,则该轮游戏结束。 ⑸游戏会根据蛇身的长度自动调节难易程度。 3.详细设计 3.1主要函数 ●void CSnakeView::OnDraw(CDC* pDC)//显示背景图片 ●void CSnakeView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)//按照用户的按键来控制蛇的移动 ●void CSnakeView::OnTimer(UINT nIDEvent)//根据蛇的长度来进行 SetTimer()函数的定义,可以根据长度来进行游戏难度的设定。//撞 界判断//蛇身相撞判断//抹掉蛇行走的痕迹//判断吃豆的条件,撞到就 吃//如果食物被吃了就生成 ●void CSnakeView::oninit()//进行贪吃蛇外观的初始化 ●void CSnakeView:: OnGameStart ()//开始游戏 ●void CSnakeView:: IniAim ()//初始化目标的位置 ●void CSnakeView::IniGame()//初始化游戏 ●void CSnakeView::ReDisplay(CPoint pPoint) ●bool CSnakeView::ReadBmp(char *bmpName)

C语言贪吃蛇实验报告

C语言程序设计报告 题目:贪吃蛇游戏的程序设计 院系:西语学院英语教育6班 : 学号:

1.1题目: 设计贪吃蛇小游戏 1.2题目的要求: 玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物,可以加分,碰到四壁游戏结束。 1.3设计的步骤: ●分析设计题目的要求,即需求分析。 ●总体设计,确定所需模块及模块间调用关系,定义系统中使用的数据类型。 ●详细设计,确定每个模块的功能,绘制主要函数的流程图。 ●编写程序代码,调试程序使其能正确运行。要求书写规范,注意采用缩进格式。函数 名、变量名要见文晓意,注释要简而不失、详而不缀。设计完成的软件要便于操作和使用。 ●程序测试,发现程序中存在的错误并改正。 ●完成报告。 2详细设计说明 2.1课程设计的要求: 通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。 ●收集资料,分析课题,分解问题,形成总体设计思路;

●对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具 体介绍; ●上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能 正常运行; ●完成课程设计报告。 2.2程序的功能: 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。 2.3课程设计的思想: 程序关键在于表示蛇的图形及蛇的移动。用一个小圆点来表示蛇的一节身体,身体每长一节,增加一个圆点,蛇头用四节来表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,如果按与蛇运动方向相反的方向键,此游戏就会暂停,再按想前的方向键才能继续游戏,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画一个圆点和覆盖原来的圆点。为了便于理解,定义两个结构体:食物与蛇。

贪吃蛇实训报告

郑州轻工业学院实训报告 实训名称:贪吃蛇 指导教师: 姓名: 学号: 班级: 提交日期:

一.实验目的 通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对象程序设计方法,独立完成一个游戏程序的开发。 二.实验题目 本次实训的题目为贪吃蛇。通过使用C#编程语言来实现。 三.功能描述 1.游戏的基本功能描述 1)游戏场地是一片矩形区域的空地构成,蛇可以在这片定义的区 域中自由移动。 2)定义一个Block来构成石块,蛇头,蛇身以及豆。蛇由蛇头和 蛇身组成。 3)当游戏开始之后,定义的区域中出现一颗豆和一条蛇,并且蛇 不停地移动,蛇移动的方向与蛇头的方向一致。 4)通过space或者暂停键可以使游戏停止,蛇停止移动,分数停 止积分。 5)当蛇移动时,玩家可以使用“↑”、“↓”、“←”和“→”四个方向键改变蛇 的移动方向。 6)当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成 一颗新的豆,蛇身增加一节。 7)当蛇头碰到石块时,蛇死亡,游戏结束。 8)当蛇头咬到蛇身时,则蛇死亡,游戏结束。 9)当蛇头碰到草坪四周时,蛇立即毙命,游戏结束。

10)游戏分为不同的级别,第一关游戏速度为200,当蛇吃五个 豆子就可以过关,级别显示为2,速度增加100变为300.第二 关为吃够10个豆子,速度增加50,以后以此类推。 11)游戏菜单中设有游戏帮助,玩家可以通过点击帮助了解游戏 的玩法。 12)对于不是第一次玩的玩家可以改变蛇的运动速度,来增加难 度。在菜单中设有加速和减速两个键,单击可以改变速度。 13)游戏菜单中还有时间显示。 14)当游戏暂停时,可以通过“继续”键使游戏继续进行。 四.需求分析 本游戏用户可以自己练习和娱乐。本游戏需要满足以下几点要求: (1)利用方向键“↑、→、←、→”来改变蛇的运行方向。 (2)空格键暂停游戏,并在随机的地方产生食物。 (3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则 正常运行。 可行性分析: 贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。 贪吃蛇的核心算法是如何实现蛇的移动和吃掉食物后如何变成新的蛇体。没有碰到食物的时候,把当前运动方向上的下个节点入队,

贪吃蛇C语言课程设计报告

贪吃蛇游戏设计 姓名:张力 学号: 10020323完成日期:月日

一、设计目的 贪吃蛇游戏程序功能的实现主要是建立在二维数组和图形界面的应用上,通过编写游戏程序能够熟悉掌握相关数组和图形函数的运用,提高编程水平,增加编程的兴趣 二、总体设计 主函数 ↓ 图形驱动I n i t画界面D r a w K游戏具体过程G a m e P l a y 图形结束C l o s e ↓ 游戏结束G a m e O v e r输出成绩P r S c o r e 三、详细设计(项目成员及分工、模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等) ①主函数m a i n(): 定义使用的常数,全局变量及函数原型说明,并调用I n i t()函数初始化图形系统;然后调用D r a w K()函数画界面,调用G a m e P l a y()函数实现游戏的具体过程,游戏结束后调用C l o s e()函数关闭图形系统结束程序。 ②画界面函数D r a w K(): 主界面是一个密封的围墙,用两个循环语句分别在水平方向和垂直方向输出连续的宽度和高度均为10个单位的矩形小方块,设置成淡青色,背景颜色为黑色。 ③游戏具体过程函数G a m e P l a y(): 算法过程: a.设置初始值。为防止食物出现在一个位置上,要设置随机数发生器,真正产生随机数。初始时,蛇只有蛇头,设定一个开始方向; b.循环执行,直到按E s c键退出; c.没有按键的情况下,循环执行。 如果没有食物,随机出现食物;食物的随机出现要确保它的位置在10的倍数位置上,因为蛇的坐标都是以10为模的;如果有食物,则显示食物,蛇

贪吃蛇实训报告

郑州轻工业学院 实训报告 实训名称:贪吃蛇 指导教师: 姓名: 学号: 班级: 提交日期: 一.实验目的 通过开发一款贪吃蛇游戏程序,熟练掌握C#编程语言、和面向对

象程序设计方法,独立完成一个游戏程序的开发。 二.实验题目 本次实训的题目为贪吃蛇。通过使用C#编程语言来实现。 三.功能描述 1.游戏的基本功能描述 1)游戏场地是一片矩形区域的空地构成,蛇可以在这片定义的区 域中自由移动。 2)定义一个Block来构成石块,蛇头,蛇身以及豆。蛇由蛇头和 蛇身组成。 3)当游戏开始之后,定义的区域中出现一颗豆和一条蛇,并且蛇 不停地移动,蛇移动的方向与蛇头的方向一致。 4)通过space或者暂停键可以使游戏停止,蛇停止移动,分数停 止积分。 5)当蛇移动时,玩家可以使用“↑”、“↓”、“←”和“→”四个方向键改变蛇 的移动方向。 6)当蛇头与豆的位置重合时,豆被蛇吃掉,同时在草坪中再生成 一颗新的豆,蛇身增加一节。 7)当蛇头碰到石块时,蛇死亡,游戏结束。 8)当蛇头咬到蛇身时,则蛇死亡,游戏结束。 9)当蛇头碰到草坪四周时,蛇立即毙命,游戏结束。 10)游戏分为不同的级别,第一关游戏速度为200,当蛇吃五个 豆子就可以过关,级别显示为2,速度增加100变为300.第二

关为吃够10个豆子,速度增加50,以后以此类推。 11)游戏菜单中设有游戏帮助,玩家可以通过点击帮助了解游戏 的玩法。 12)对于不是第一次玩的玩家可以改变蛇的运动速度,来增加难 度。在菜单中设有加速和减速两个键,单击可以改变速度。 13)游戏菜单中还有时间显示。 14)当游戏暂停时,可以通过“继续”键使游戏继续进行。 四.需求分析 本游戏用户可以自己练习和娱乐。本游戏需要满足以下几点要求: (1)利用方向键“↑、↓、←、→”来改变蛇的运行方向。 (2)空格键暂停游戏,并在随机的地方产生食物。 (3)吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则 正常运行。 可行性分析: 贪吃蛇游戏是一种简单的大众的游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,做一个简单的贪吃蛇小游戏。 贪吃蛇的核心算法是如何实现蛇的移动和吃掉食物后如何变成新的蛇体。没有碰到食物的时候,把当前运动方向上的下个节点入队,并以蛇节点的颜色绘制这个节点,然后把头指针所指的节点出队,并以游戏框架内部背景色重绘出队的节点,这样就可以达到移动的效

贪吃蛇游戏设计报告

贪吃蛇游戏设计 班级:13级7班 学号: 姓名: 一、实验目的 1.熟练掌握C6713 的中断结构和对中断的处理过程。 2.熟练掌握C6713 定时器的控制和使用方法。 3.熟练掌握键盘的使用原理及编程方法。 4.熟练掌握使用C6713DSP的扩展空间控制外围设备信息的方法;掌握蜂鸣器发声原理和音乐发生方法;掌握液晶显示器的显示控制原理及编程方法。 5.掌握C6713的系统自启动设计方法。 6.熟练掌握C语言开发DSP程序的流程及调试方法。 二、实验设备 计算机,ICETEK-C6713-EDU 实验箱,示波器。 三、实验内容(*号为选做内容) 1、在液晶屏上显示游戏背景、初始蛇身及运动、随机产生食物。 2、可以用键盘控制蛇身运动、暂停游戏。 3、游戏烧写到FLASH内,可以上电自启动运行。 四、设计原理 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个按键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体叉蛇头撞倒自

己身体游戏结束。 要想实现贪吃蛇功能,需要应用到键盘,按键中断,和液晶显示。想要正常使用按键,就要调用包含于有文件"ICETEK-C6713-A.h"中的init_emif();和InitCTR();程序用来初始化emif和ICETEK-CTR。 中断原理:dsp有三种类型的中断cpu的TMS320C6000:重置、可屏蔽的、不可屏敝的复位中断优先级最高,对应于复位信号。不可屏蔽中断优先级最高,对应于第二敝中断信号。最低优先级中断中断4?15对应INT4?INT15信号。重置,敝中断,一些INT4?INT15信号映射到C6000设备上的别针。一些INT4?INT15中断信号是内部使用的外设和一些可能不可用或在软件的控制下可以使用。 外中断区别于计时器等片内设备中断,它来源于DSP 片外,属于硬件中断。外中断信号通过DSP 器件封装上的专用管脚输入DSP,属于可屏蔽中断。TMS3206713DSP 有三个外中断:EXT_INT4~EXT_INT7,如果CPU 允许,这四个信号线上的低脉冲信号会中断CPU。 中断是为使CPU 具有对外界异步事件的处理能力而设置的。通常DSP 工作在包含多个外界异步事件环境中,当这些事件发生时,DSP 应及时执行这些事件所要求的任务。中断就是要求CPU 暂停当前的工作,转而去处理这些事件,处理完成后,再回到原来被中断的地方继续原来的工作。显然,服务一个中断包括保存当前处理现场,完成中断服务,恢复各寄存器和现场,然后返回继续执行被暂时中断的程序。请求CPU 中断的请求源称为中断源。这些中断源可以是片内的,如定时器等,也可以是片外的,如A/D 转换及其他片外装置。片外中断请求连接到芯片的中断管脚,并且在这些管脚处的电平上升沿产生。如果这个中断被使能,则CPU开始处理这个中断,将当前程序流程转向中断服务程序。当几个中断源同时向CPU 请求中断时,CPU 会根据中断源的优先级别,优先响应级别最高的中断请求。TMS320C6000 有11 个寄存器管理中断服务: *控制状态寄存器CSR 控制全局使能或禁止中断 *中断使能寄存器IER 使能或禁止中断处理 *中断标志寄存器IFR 指示有中断请求但未被响应的中断发生 *中断设置寄存器ISR 手动设置IFR 中的标志位 *中断清除寄存器ICR 手动清除IFR 中的标志位 *中断服务表指针ISTP 指向中断服务表的起始地址 *不可屏蔽中断返回指针NRP 包含从不可屏蔽中断返回的地址,该中断返回通过B NRP指令完成

相关文档