看了Windows程序设计(第5版) 前面几章, 就想写点东西练习一下.
于是就写了这个贪吃蛇游戏. 花了点时间做了详细的注释. 初学的人可以参考一下
图形用windows api绘制, 逻辑思路在类Snake中, 用list存储蛇坐标.
下载地址:http://download.csdn.net/detail/l470080245/3680228
SnakeGame.h
/* - - - - - - - - - - - - - - - - - - - - -贪吃蛇游戏
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和nClientHeightint 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;