用C语言写贪吃蛇笔记-1

本文目录

贪吃蛇设计思想

  • 要求:
    • 1.学完C语言大部分基础知识
    • 2.能坚持看完本文
    • 3.本文发布的只是思想,详细代码请关注本博客下一篇文章(要等博主自己写完哦)
  • 目的:
    • 1.学了一年C语言,也是博主对自己的一次考验吧
    • 2.激发广大网友对编程的兴趣(能帮到大家是我的荣幸)
    • 3.增加网站收录量,提升网站排名

程序功能介绍

贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。


程序整体设计说明

任何一种游戏都必须具备开始部分,运行部分,结束部分。但其核心是运行部分,它是整个游戏程序的中间力量,故其对程序设计的严密性要求极其严格。

设计思路 贪吃蛇游戏设计的虽然总体分为开始、运行、结束三个过程,但其内部程序非常之复杂具体包括开始时的状态,游戏进行中如果得分其分数的累加程序的设计,当玩家游戏结束时所出现的音频及图片效果等设计的程序主要包括主函数,printf()函数,scanf()函数等各种输入输出函数。同时还运用了各种数据类型和运算符以及各种选择结构循环结构的重复使用。特别是运用了数组结构(1.2.3维)和函数之间的调用是程序更为完整清楚简便,易于读懂。这个程序的关键是表示蛇的图形以及蛇的移动。用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示。移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来就像多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现和消失也是由画矩形块和覆盖矩形块所覆盖。这样一个贪吃蛇游戏程序在所学的C语言知识下便设计成功。


数据结构设计及用法说明

开始部分:

由于贪吃蛇游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,由此我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面,这样玩游戏时比较有真实感,图像感。标题画面以后,还要为游戏的运行部分作初始化,包括绘制游戏运行时的背景以及游戏运行时的音频效果,同时还要对游戏某些重要变量的初始化。

运行部分:

第一轮循环:第一步,出现食物;

第二步,蛇不停运动;

第三步,检查蛇是咬到自己或撞到墙壁;

由第四步起游戏有两条支线(A、B):

A :第四步,当蛇没有碰到自己或墙壁,蛇继续前进,绘制蛇的动作;

第五步,判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;如果蛇没有在规定的时间内吃到食物,食物将自动消失。

第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;

B:第四步,蛇碰到自己或墙壁,终止游戏。 结束部分:

游戏结束时,显示“GAME OVER”背景图象,并配有比较忧伤的音乐,已经是约定俗成的规律了,我所设计的贪吃蛇游戏也不例外。除了游戏结束画面外,我还设置了一个游戏退出画面,并提示玩家是否退出游戏或者是继续此前游戏。


有了上述的大致划分,我把整个程序划分成(13+2)个基本模块(其实就是函数的基本应用以及根据函数的用途所划分的小模块)


总流程图


分流程图 (模块)


更新至2016-10-12

后续内容请见下篇文章

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

winform中linkLabel的用法(示例)

private void Form1_Load(object sender, EventArgs e)         {             this...

1915
来自专栏跟着阿笨一起玩NET

C# 通过HttpWebRequest在后台对WebService进行调用

http://www.cnblogs.com/macroxu-1982/archive/2009/12/23/1630415.html

2752
来自专栏菩提树下的杨过

MSDN官方的ASP.Net异步页面的经典示例代码

示例1.演示异步获取一个网址的内容,处理后显示在OutPut这一Label上 using System; using System.Web; using S...

1985
来自专栏谈补锅

记录C#常用的代码片段

using Newtonsoft.Json; using Newtonsoft.Json.Linq;

922
来自专栏成长道路

JDBC动态SQL语句连接orcale数据库的工具类

import java.sql.Connection; import java.sql.DriverManager; import java.sql.P...

2460
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

20410
来自专栏码匠的流水账

聊聊spring cloud的AbstractLoadBalancingClient

本文主要研究一下spring cloud的AbstractLoadBalancingClient

832
来自专栏c#开发者

jquery easyui datagrid mvc server端分页排序筛选的实现

1自定义一个ModelBinder public class filterRule { public string field { g...

4179
来自专栏闻道于事

商城项目整理(三)JDBC增删改查

商品表的增加,修改,删除,订单表的增加,确认,用户表的查看,日志表的增加,查看 商品表建表语句: 1 create table TEST.GOODS_TABL...

5435
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

23310

扫码关注云+社区