《贪吃蛇游戏课程设计》报告

更新时间:2023-06-19 21:35:42 阅读: 评论:0

贪吃蛇游戏程序设计
一、课程设计任务
    贪吃蛇小游戏程序设计
二、设计要求
通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。
(1).收集资料,分析课题,分解问题,形成总体设计思路;
(2).对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具体介绍;
(3).上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能正常运行;
(4).完成课程设计报告,并进行答辩
三、需求分析
3.1、程序功能 
贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。
3.2、设计思想
程序关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用
背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇。
3.3、流程图
四、设计的具体实现
社区生活(1)函数定义 
函数定义是对各个基础函数的定义,并且设置需要运用的信息,便于调用

#define N 200
#define M 200
#include"graphics.h"
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream.h>
#include<dos.h>
有关书的作文#include<conio.h>
#include <windows.h>
#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();//图形驱动
void Clo();//图形结束
void DrawK();//开始画面
void GamePlay();//玩游戏的具体过程
void GameOver();//游戏结束
void PrScore();//输出成绩

(2)主函数main( ) 
主函数是程序的主流程,首先定义使用到的常数、全局变量及函数原型说明,然后初始化图形系统,调用函数DrawK()画出开始画面,调用函数GamePlay(),即玩游戏的具体过程,游戏结束后调用Clo()关闭图形系统,结束程序
void main()//主函数
{
Init();//图形驱动
DrawK();//开始画面
GamePlay();//玩游戏的具体过程
Clo();//图形结束
}
void Init()//图形驱动
小蜜蜂嗡嗡嗡
{
int gd=DETECT,gm;
initgraph(&gd,&gm," ");/*此处为turboc的路径,读者可以根据自己的电脑而改*/
cleardevice();
}
(3) 画界面函数DrawK( ) 
主界面是一个封闭的围墙,用两个循环语句分别在水平和垂直方向输出连续的宽度和高度均的矩形方块,表示围墙,为了醒目,设置为色。
void DrawK()//开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙
{
    tbkcolor(GREEN);
    tcolor(LIGHTRED);
    tlinestyle(0,0,5);//设置线型
    for(i=50;i<=600;i+=10)//画围墙
    {
        rectangle(i,40,i+10,49);//上边
        rectangle(i,451,i+10,460);//下边
    }
    for(i=40;i<=450;i+=10)
    {
        rectangle(50,i,59,i+10);//左边
        rectangle(601,i,610,i+10);//右边
    }
}
(4)游戏具体过程函数GamePlay(  
雷厉风行近义词这是游戏的主要组成部分,他采用将前一节的坐标赋给后一节,用背景颜色将最后节去除,当蛇头的坐标与食物的坐标相等时,表示食物被吃掉了。
void GamePlay()//玩游戏的具体过程
{
    rand();//随机数发生器
    s=1;//1表示需要出现新食物,0表示已经存在食物
    snake.life=0;//蛇活着
    snake.direction=1;//方向往右
    snake.x[0]=100;snake.y[0]=100;//舌头坐标
    snake.x[1]=110;snake.y[1]=100 ;
    de=2;//蛇的节数
    PrScore();//输出分数
    while(1)//可重复玩游戏,按ESC键结束
    {
        while(!kbhit())//在没有按键的情况下,蛇自己移动身体
        {
            s==1)//需要出现新食物
            {
                food.x=rand()%400+60;
                food.y=rand()%350+60;
                while(food.x%10!=0)//食物随即出现后必须让食物能够在整格内,这样才能让蛇迟到
                    food.x++;
                while(food.y%10!=0)
幼儿英语绘本                    food.y++;
                s=0;//画面上有食物了
            }
            s==0)//画面上有食物就要显示
            {
                tcolor(GREEN);
                rectangle(food.x,food.y,food.x+10,food.y-10);
            }
            for(de-1;i>0;i--)//蛇的每个环节往前移动,也就是贪吃蛇的关键算法
            {
                snake.x[i]=snake.x[i-1];
                snake.y[i]=snake.y[i-1];
            }
            switch(snake.direction)//1,2,3,4表示上下左右四个方向,通过这个判断来移动蛇头
黄山特点
            {
                ca 1:
如何添加水印
                    snake.x[0]+=10;break;
                ca 2:
                    snake.x[0]-=10;break;
                ca 3:
                    snake.y[0]-=10;break;
                ca 4:
                    snake.y[0]+=10;break;
            }
            for(i=3;i&de;i++)//从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来

本文发布于:2023-06-19 21:35:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/993754.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:食物   蛇头   表示   移动
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图