看了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; // 蛇坐标
bool bPauseGame; // 蛇状态(是否暂停)
int Direction; // 蛇前进方向
RECT RectFood; // 食物坐标
int nClientWidth; // Clinet 大小
int nClientHeight;
};extern Snake snk;