西南财经大学天府学院

更新时间:2023-05-12 13:17:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

西南财经大学天府学院

贪食蛇程序设计(一)

2013-7-27

西南财经大学天府学院

西南财经大学天府学院

程序思路游戏规则: 1、蛇头不能咬蛇身--蛇头不能和蛇身发生碰撞,撞上 就gameover,包括不能反方向运动

2、蛇头不能碰障碍--撞上就gameover,包括不能走出游戏区域 3、蛇吃了食物会增加长度,食物吃掉一个才会产生新的 4、蛇只有上下左右四个行走方向

2013-7-27

西南财经大学天府学院

西南财经大学天府学院

程序模块结构1、初始化:场景、外边框和蛇

(初始化蛇的长度,初始化蛇的行走方向)2、在场景中放置食物,吃完一个再出现下一个, 吃一个食物蛇身增加一节,食物不能和障碍重合 3、蛇的运动,一节跟一节 4、行走中检测蛇头不能和障碍、蛇身碰撞,也不能

超出游戏区域5、键盘的监听,控制蛇的运动,及改变游戏状态2013-7-27 西南财经大学天府学院 3

西南财经大学天府学院

一、本节课需要完成的任务

程序初始化:

1、全局变量的定义(初始化游戏的速度以及得分)2、蛇结构体的定义,食物结构体的定义 3、图形界面的初始化(Init( )函数)

游戏围墙的绘制(Draw()函数) 食物的出现(Gameplay()函数)

1、食物及蛇状态的初始化2、食物的出现西南财经大学天府学院

2013-7-27

西南财经大学天府学院

(一)、程序初始化——————全局变量int a , b ; f1 ( int c ) { int d , e ; …d、e的 作用范围 c 的作 用范围 全 局 变 量 a、 b 的 作 用 范 围

全局变量:

是指在函数之外定义的变量,其作用范围是从 定义位置开始到源文件

}int i; main()

结束为止,其间的函数都可以使用

{int m , n ; … }2013-7-27

西南财经大学天府学院

返回 5

西南财经大学天府学院

(一)、程序初始化

蛇的结构体的定义:

—————结构体的定义(数组的定义)

每一节蛇坐标的表示

蛇移动方向的表示蛇生命的表示

蛇节数的表示

食物结构体的定义:

食物的坐标的表示食物有无的表示2013-7-27 西南财经大学天府学院

返回 6

西南财经大学天府学院

(一)、程序初始化—————图形界面的初始化

int gd=DETECT , gm; initgraph ( &gd , &gm ,”c:\\Win-TC”) ;

2013-7-27

西南财经大学天府学院

返回 7

西南财经大学天府学院

(二)、游戏边框的绘制(Draw函数)开始画面,左上角坐标为(50,40) 右下角坐标为(610,460)的围墙库函数rectangle (left, top, right , bottom ) ; (50,40)(60,50)

(600,450)

(610,460)2013-7-27 西南财经大学天府学院

返回 8

西南财经大学天府学院

(三)、Gameplay()函数:———结构体变量的使用需要出现新食物 :food.yes=1; /*1表示需要出现、0表示已存在*/ 蛇的状态:snake.life=0; /*0表示活着、1表示死亡*/

蛇默认(初始)运动方向:snake.direction=?;蛇的默认(初始)节数: snake.node=2; 蛇的默认(初始

)坐标: snake.x[0]=?;snake.y[0]=?; /*蛇头*/ snake.x[1]=90;snake.y[1]=100; /*蛇身*/

注意结构体变量成员的引用格式:2013-7-27 西南财经大学天府学院

<结构体变量> . <成员>返回 9

西南财经大学天府学院

(三)、Gameplay()函数:—————食物的出现判断是否需要出现食物——判断food.yes的值 1:/*需要出现新食物*/

随机产生食物坐标,并使坐标能被十整除/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/

改变food.yes的状态: 0 : 画出食物2013-7-27 西南财经大学天府学院

/*显示食物*/

返回 10

西南财经大学天府学院

贪食蛇程序设计(二)

2013-7-27

西南财经大学天府学院

西南财经大学天府学院

二、本节课需要完成的内容蛇的运动:先自由移动,用方向键控制蛇的方向。程序思想:

一、蛇自由移动:在没有任何按键的时候,蛇按照初始方向向前移动 ;while(bioskey(1)==0)表示无键盘输入

二、方向键控制蛇的移动方向:用方向键控制蛇结构体里面的 方向成员。同时如果不出现蛇死亡或者按ESC键,我们可以 永远玩游戏。永远玩游戏这里将用到一个什么语句?永循环 while(1)2013-7-27 西南财经大学天府学院 12

西南财经大学天府学院

Gameplay( )程序结构食物及蛇状态的初始化 while (1) { while (bioskey(1)==0) { 判断是否需要出现食物,并进行相应的操作 蛇身、蛇头坐标的改变 画出蛇,并使蛇运动 } /*end while(!bioskey(1))*/ 监听方向键及ESC键 } /*end while*/2013-7-27 西南财经大学天府学院 13

西南财经大学天府学院

(一)、蛇的移动移动的思想:1、蛇身、蛇头坐标的改变

蛇身:将蛇的第二节在屏幕中的坐标移动到第一节,第三节中的坐标节移动到第二节…… 蛇头:随着方向键走。 2、蛇向前运动: 画出蛇,延时(gamespeed),并用用背景色去除 蛇的最后一节2013-7-27 西南财经大学天府学院 14

西南财经大学天府学院

1、蛇的坐标改变蛇身的坐标改变 for( i = snake.node-1 ; i > 0; i -- ) { snake . x [i] = snake . x [i-1] ; snake . y [i] = snake . y [i-1] ; }2013-7-27 西南财经大学天府学院 15

西南财经大学天府学院

1、蛇的坐标改变蛇头的坐标改变1>、方向键的表示

上1 1: 2:

下2

左3

右4

UP DOWN LEFT RIGHT

2>、如果蛇结构体的方向成员为snake . y [0] - = 10 ; ……………

3:4:2013-7-27

…………………………西南财经大学天府学院 16

西南财经大学天府学院

2、蛇向前运动画蛇(for) delay(gamespeed); 用背景色去除蛇的最后一结:

2013-7-27

西南财经大学天府学院

西南财经大学天府学院

(二)、方向键控制蛇的移动1、接受按键:key=bioskey(0);

2、按ESC键退出游戏3、方向键改变蛇的结构体方向成员

如果key ==UP&&snake.direction!=2:snake.direction=1;

………依此………..类推…………………………

2013-7-27

西南财经大学天府学院

西南财经大学天府学院

贪食蛇程序设计(三)

2013-7-27

西

南财经大学天府学院

西南财经大学天府学院

三、本节课需要完成的内容

设置游戏规则

1、判断蛇是否撞击自己,如果撞击自己游戏就结束(调用 gameover()函数,在程序外面定义gameover()函数, 同时蛇的生命成员为1;2、判断蛇是否撞击墙壁,如果撞击墙边游戏就结束(调用 gameover()函数),同时蛇的生命成员为1; 3、判断蛇是否吃到食物,如果吃到食物,先把食物擦除,蛇 长度加1,食物的判断变量food.yes=1,分数加10,输出分 数(调用显示分数函数printscore( ),在程序外面定义 printscore( )函数);2013-7-27 西南财经大学天府学院 20

西南财经大学天府学院

判断蛇是否撞击自己

for(i=3 ; i<snake.node ; i++) { if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]) { GameOver(); snake.life=1; break; } }

2013-7-27

西南财经大学天府学院

本文来源:https://www.bwwdw.com/article/7yre.html

Top