发个贪吃蛇
看了Windows程序设计(第5版) 前面几章, 就想写点东西练习一下.
于是就写了这个贪吃蛇游戏. 花了点时间做了详细的注释. 初学的人可以参考一下
图形用windows api绘制, 逻辑思路在类Snake中, 用list存储蛇坐标.
下载地址:http://download.csdn.net/detail/l470080245/3680228
/* - - - - - - - - - - - - - - - - - - - - -
贪吃蛇游戏
SnakeGame.h —— Snake,1.0版
Copyright (C) ling135,2011
- - - - - - - - - - - - - - - - - - - - - - - -*/
#pragma once
#include <windows.h>
#include <list>
using std::list;
const int nWIDTH = 300, nHEIGHT = 300;// 默认窗口大小
const int _BLOCKSIZE = 15;// 设定网格块边长(正方形)
const int S_LEFT = 0, S_RIGHT = 1, S_UP = 2, S_DOWN = 3;// 四个方向
const int _SUCCESS = 2, _OF_TS = 3;// 成功通关, 越界或蛇头碰到身体(overflow, touch snake)
const int _LENGTH = 15, _TIMER = 300;// 通关时蛇长度, 定时器时间
// 函数声明, 控制游戏和绘画图形
void GameInit(HWND& hWnd);// 初始化游戏
void Start(HWND& hWnd);// 开始游戏
void Pause(HWND& hWnd);// 暂停游戏
void End(HWND& hWnd, bool bIsSuccess);// 结束游戏
void DrawBaseLine(HDC& hdc, int cxClient, int cyClient);// 画网格线
void SetGameSize(HWND& hWnd, int &cxClient, int &cyClient);// 设置Client区的大小
void DrawBlock(HWND& hWnd, RECT &rect, COLORREF crColor);// 绘画格子
void DrawSnake(HWND &hWnd, COLORREF crColor );// 绘蛇
// 模拟蛇
class Snake
{
public:
Snake();
~Snake();
// 蛇对象行为
void InitSnake();// 初始化蛇
void Left();// 向左
void Right();// 向右
void Up();// 向上
void Down();// 向下
void EatFood();// 是否吃到食物
int Check();// 检查是否通关和越界及蛇头碰到身体
RECT GenerateFood();// 随机产生食物
// 设置和获取信息
void SetClientSize(int &cxClient, int &cyClient);// 设置nClientWidth和nClientHeight
int GetDir() { return Direction; }// 返回蛇前进方向
RECT GetRectFood() { return RectFood; }// 返回食物坐标
void SetState(bool bState) { bPauseGame = bState; }// 设置蛇状态(是否暂停)
bool GetState() { return bPauseGame; }// 返回蛇状态(是否暂停)
list<RECT>& GetSnakeList() { return SnakeList; }// 返回SnakeList
private:
list<RECT>SnakeList;// 蛇坐标
boolbPauseGame;// 蛇状态(是否暂停)
intDirection;// 蛇前进方向
RECTRectFood;// 食物坐标
intnClientWidth;// Clinet 大小
intnClientHeight;
};
extern Snake snk;