C++课程设计贪吃蛇小游戏(内附完整源码与附件) 下载本文

食物 蛇头 蛇尾

蛇头↑ 蛇尾↑

注:有箭头代表蛇的方向。

当蛇吃到食物的时候, 只需要在食物的地方绘制蛇头, 而原来蛇 头的地方绘制蛇身即可, 无须擦除蛇尾再进行绘制, 然后重新产生食 物,如下图。

蛇头 蛇身 蛇尾

蛇头↑ 蛇身↑ 蛇尾↑

食物

当检测到按键的时候,先改变蛇的移动方向,再移动蛇即可。 (2)主要实现 (详细的关键代码)

void RetroSnaker ::move() {

switch (directionMap[hearY][hearX]) {

case UP:

if ( FOOD== map[hearY - 1][hearX])

againFood();

else if ( EMPTY== map[hearY - 1][hearX])

erasingTheTail(); else {

gameOver = true ; / / 没有遇到食物或者空,则表示游戏结束 break ; }

erasingTheHear( break ; case DOW:N

if ( FOOD== map[hearY + 1][hearX])

againFood();

else if ( EMPTY== map[hearY + 1][hearX])

erasingTheTail(); else {

gameOver = true ; / / 没有遇到食物或者空,则表示游戏结束 break ; }

erasingTheHear( break ; case LEFT:

if ( FOOD== map[hearY][hearX - 1])

againFood();

else if ( EMPTY== map[hearY][hearX - 1])

erasingTheTail(); else {

gameOver = true ; / / 没有遇到食物或者空,则表示游戏结束 break ; }

erasingTheHear( break ; case RIGHT:

if ( FOOD== map[hearY][hearX + 1])

againFood();

// 吃到食物

LEFT);

// 擦除尾巴

// 什么都没遇到 // 吃到食物

DOW)N;

// 擦除尾巴

// 什么都没遇到 // 吃到食物

UP);

// 擦除尾巴

// 什么都没遇到 // 吃到食物

else if ( EMPTY== map[hearY][hearX + 1])

erasingTheTail(); else {

// 擦除尾巴

// 什么都没遇到

gameOver = true ; / / 没有遇到食物或者空,则表示游戏结束 break ; }

erasingTheHear( break ; default :

break ; } }

RIGHT);

四:上机运行结果与分析

(详细的程序运行结果,图 /表/文相结合,并对结果进行较全面的对比分析,类 似于“ 验证问题 ”)

与预期的结论一致,运行结果满足预期效果。

五:结论(讨论)

1、上机结论 (对应前面的上机目的)

通过本次上机,充分的锻炼了我解决问题的能力,让我更加的了解到知识得 运用才能熟练的掌握,也提高了我的学习兴趣和热情。

2、讨论 (存在的问题及可能的改进方向)

游戏界面比较单一,只有蛇和食物,没有统计分数和排行榜,也 没有游戏结束的画面, 还不能调整游戏的难度, 蛇的速度基本是恒定 的,无法动态修改。这是我需要改进的地方。