谁给个c++易语言控制台源码简易游戏源码

游戏VC源码,VC源码,VC源码下载 -
&发布中心&
&VC源码分类
资源搜索:
Delphi源码
Python源码
Android源码
IT考试资料
系统设计方案
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&VC源码->游戏共119个&&本页显示第1-15个&&&&资源名称资源等级网友评分下载评论&&&发布者:yueshang,发布时间: 13:58:34,资源大小:1986KB3.5221512自作的飞机小游戏,VC实现。&查看网友评论&&&&正在读取...&发布者:tjpublic,发布时间: 21:51:11,资源大小:1625KB3.6920110本游戏实现了一个实时、多人、分布式坦克对战游戏。游戏的主要特征包括:
游戏运行于Win32平台(Win95 / 98, Win NT 4或者更高);
支持各种通信协议(LAN, Internet, Dial-up, Direct cable);
游戏允许四个人参与;
游戏使用图像...&查看网友评论&&&&正在读取...&发布者:jsj,发布时间: 18:50:59,资源大小:1900KB5.015680很少做小游戏,这个程序是最近看到的一个小游戏的主体部分。
无聊之中,实现一下这个功能。把源码与各位网友分享。&查看网友评论&&&&正在读取...&发布者:sunkey3,发布时间: 17:24:41,资源大小:2226KB3.039125 一个五子棋游戏,具有记忆功能,但算法一般,采用的是对每个结点分配权值,根据权值的大小来选择落子位置。&查看网友评论&&&&正在读取...&发布者:bacde,发布时间: 17:59:52,资源大小:9666KB2.6674123几个经典游戏源代码--c++版,下回去学习吧!呵呵!&查看网友评论&&&&正在读取...&发布者:blue0sky,发布时间: 14:05:18,资源大小:11KB06700简单的贪吃蛇游戏,本人水平有限,如有什么意见或指导,还望指点!&查看网友评论&&&&正在读取...&&&发布者:knightage,发布时间: 8:34:03,资源大小:1518KB3.81992228这是纸牌游戏斗地主,算法完整,可以单机,网络连线玩&查看网友评论&&&&正在读取...&发布者:shaolin1221,发布时间: 15:40:48,资源大小:20113KB024971Visual C++角色扮演游戏程序设计,内含角色扮演游戏源代码。&查看网友评论&&&&正在读取...&发布者:charmwebber,发布时间: 21:42:05,资源大小:3KB3.021180五子棋源码编译通过&查看网友评论&&&&正在读取...&&&发布者:3DCube,发布时间: 21:43:39,资源大小:12147KB5.070244可编译运行,有兴趣的可以联系QQ:,请勿再行发布
1、DX11六面体方块;
2、DSound声音;
3、单打、对打;
4、画面华丽;
5、运行流畅,有FPS显示;
6、控制精准&查看网友评论&&&&正在读取...&&&发布者:mccl,发布时间: 14:27:20,资源大小:3557KB030313游戏采用我们之前开发的DriectX 2D游戏引擎,游戏附带动画,音效,UI控件等功能。
目前游戏引擎的事件驱动因采用仿MFC的架构,导致程序多重继承时会发生4407警告,这两天修复该bug之后,在做游戏细节讲解说明。
目前按钮控件事件响应和MFC下的按钮响应一模一样,游戏代码...&查看网友评论&&&&正在读取...&&&发布者:luofuxing,发布时间: 23:39:39,资源大小:45KB2.8419514推箱子游戏课程设计(C语言)&查看网友评论&&&&正在读取...&发布者:king_no1,发布时间: 17:06:32,资源大小:16495KB4.4742118网上找的一个RPG游戏源码!供大家学习!&查看网友评论&&&&正在读取...&发布者:proglove,发布时间: 19:59:43,资源大小:14190KB2.08964Beginning OpenGL Game Programming -源码,电子书网上搜索能找到,但代码难找,看了一下代码,有很高的学习价值.&查看网友评论&&&&正在读取...&发布者:bravefool,发布时间: 17:13:35,资源大小:7322KB2.82067225 <>是作者在97年,临近大学毕业的时候开发的,当时国内盛行红警,游戏开发行业才刚刚开始。虽然本游戏在98年初参加ENIX全球大赛获优胜奖,但很多设计思想还不成熟。不过对于想入门入门开发游戏的程序爱好者来说这是个不错的参考。
本游戏利用了当时刚推出的DirectX 2D和Dire...&查看网友评论&&&&正在读取...共8页&&&&[1]&&&&&&&&
QQ技术交流群:编程乐园
(VB交流群) 3326898(Delphi交流群) (VC交流群) &&
版权所有 &
保留所有权力 &&游戏截图:
以下是3个代码文件:
Snake_Class.h文件:
1 #ifndef SNAKE
2 #define SNAKE
4 #include&windows.h&
5 #include&vector&
6 #include&string&
8 //标记界面和菜单项的ID
9 enum ID_ { ID_1=1, ID_2, ID_3, ID_4, ID_5, ID_6, ID_7 };
11 //标记初级,中级,高级三种游戏等级
12 enum Rank_ { first=150, middle=100, high=50 };
15 //贪吃蛇结构
16 struct Snake_data{
//标记蛇状态
UINT Snake_
//标记蛇长度
std::vector&COORD& Snake_ //蛇的当前坐标
COORD food_
//食物坐标
//标记等级
//记录按键方向
//标记当前停留界面ID
//标记被选中菜单的ID
//标记刷新
29 //贪吃蛇类
30 class Snake_class{
31 public:
Snake_class(){}
Snake_class(Snake_data *data): pSnake(data){}
void ShowMenu();
//显示菜单
void StartGame() ;
//开始游戏
void ShowPause();
//显示暂停界面
void SaveRecord();
//保存记录
void ShowRank();
//显示等级
void ShowRecord();
//显示存档记录列表
bool Read( size_t );
//读取记录
void ShowArmory();
//显示英雄榜
void Die();
//死亡界面
size_t Create_file();
//存储文件
44 private:
void JudgeDie();
//判断死亡
bool Jesus();
//上榜判断
void ShowSnake( COORD& );
void ShowPointer( COORD,std::string ); //显示指针
void Show_not();
//显示无数据
Snake_data *pS
55 #endif;
Snake_class.cpp:
1 #include"Snake_Class.h"
2 #include&iostream&
3 #include&fstream&
4 #include&ctime&
5 #include&cstdlib&
7 //获取缓冲区句柄
8 static const HANDLE handle = GetStdHandle( STD_OUTPUT_HANDLE );
9 static CONSOLE_SCREEN_BUFFER_INFO
10 //保存蛇的记录数据文件
11 static const char *Snake_Record[] = { "d://SnakeRecord//Snake1.txt",
"d://SnakeRecord//Snake2.txt",
"d://SnakeRecord//Snake3.txt",
"d://SnakeRecord//Snake4.txt",
"d://SnakeRecord//Snake5.txt" };
17 static const char *S_Armory[] = { "d://SnakeRecord//Armory1.txt",
"d://SnakeRecord//Armory2.txt",
"d://SnakeRecord//Armory3.txt" };
20 //显示主菜单(完成已测试)
21 void Snake_class::ShowMenu(){
//获取缓冲区相关信息
GetConsoleScreenBufferInfo( handle, &info );
char *str[] = {"开 始 游 戏",
"难 度 等 级",
"读 取 存 档",
"英 雄 榜",
"退 出 游 戏"};
//输出菜单选项
short y = 3;
COORD cd = { info.srWindow.Right/2 - 5, y };
for( size_t n=0;n&sizeof(str)/sizeof(*str);++n ){
SetConsoleCursorPosition( handle, cd );
std::cout&&*(str+n);
cd.Y += 2;
37 //判断指针指向哪个菜单选项
cd.X -= 2;
switch( pSnake-&ID_option ){
case ID_1:
case ID_2:
cd.Y = y+2; break;
case ID_3:
cd.Y = y+4; break;
case ID_4:
cd.Y = y+6; break;
case ID_5:
cd.Y = y+8; break;
ShowPointer( cd,pSnake-&Flag?std::string("
"):std::string("&&") );
55 //开始游戏(完成待测试)
56 void Snake_class::StartGame(){
//判断是否已有食物
if( !pSnake-&food_coord.X ){
srand((unsigned int)time(NULL));
//限制食物出现的坐标不与围墙相同
++( cd.X = rand()%78 );
++( cd.Y = rand()%18 );
//判断食物坐标是否与蛇身吻合
std::vector&COORD&::
for( ite=pSnake-&Snake_coord.begin(); ite!=pSnake-&Snake_coord.end(); ++ite ){
if( ite-&X == cd.X && ite-&Y == cd.Y )
if( ite == pSnake-&Snake_coord.end() ){
pSnake-&food_coord.X = cd.X ;
pSnake-&food_coord.Y = cd.Y ;
SetConsoleCursorPosition( handle, pSnake-&food_coord );
std::cout&&"*";
//判定按键方向
= pSnake-&Snake_coord.begin()-&X;
cd.Y = pSnake-&Snake_coord.begin()-&Y ;
switch( pSnake-&key ){
case VK_UP:
--cd.Y; break;
case VK_DOWN:
++cd.Y; break;
case VK_LEFT:
--cd.X; break;
case VK_RIGHT:
++cd.X; break;
ShowSnake( cd );
JudgeDie();
97 //显示暂停界面(完成已测试)
98 void Snake_class::ShowPause(){
COORD cd = { info.srWindow.Right/2-10, info.srWindow.Bottom/5 };
SetConsoleCursorPosition( handle, cd );
std::cout&&"游 戏 暂 停 中 ......";
char *str[] = { "继 续 游 戏",
"保 存 游 戏",
"退 出 游 戏" };
105 //输出菜单选项
short X = info.srWindow.Right/3;
cd.X = X/2-5 ;
cd.Y = info.srWindow.Bottom/3*2-4;
for( size_t i=0;i&sizeof(str)/sizeof(*str);++i ){
SetConsoleCursorPosition( handle, cd );
std::cout&&*(str+i);
cd.X += X;
115 //判断指针应指向的菜单选项
switch( pSnake-&ID_option ){
case ID_1:
cd.X = X/2-7; break;
case ID_2:
cd.X = X/2+X-7; break;
case ID_3:
cd.X = X/2+2*X-7; break;
ShowPointer( cd,pSnake-&Flag?std::string("
"):std::string("&&") );
127 //保存记录(完成未测试)
128 void Snake_class::SaveRecord(){
outopen.open( *( Snake_Record + Create_file() ) );
if( !outopen ){
std::cerr&&"\n打开文件失败!\n";
//保存记录到文件中,前面加"0"是为了后面检测是否文件为空使用
outopen&&"0 "&&pSnake-&Snake_size&&" ";
for(std::vector&COORD&::iterator ite=pSnake-&Snake_coord.begin();
ite!=pSnake-&Snake_coord.end();++ite )
outopen&&ite-&X&&" "&&ite-&Y&&" ";
outopen&&pSnake-&rank&&" "&&pSnake-&mark&&" "&&pSnake-&
outopen.close();
142 //输出保存成功
COORD cd = { info.srWindow.Right/2-4, info.srWindow.Bottom/3*2-1 };
SetConsoleCursorPosition( handle, cd );
std::cout&&"保存成功!\a";
148 //显示等级(已测试)
149 void Snake_class::ShowRank(){
COORD cd = { info.srWindow.Right/2-6, info.srWindow.Bottom/3+2 };
char *str[] = { "初
for( size_t i=0;i&sizeof(str)/sizeof(*str);++i ){
SetConsoleCursorPosition( handle, cd );
std::cout&&*(str+i);
cd.Y += 2;
//判断指针所停留的选项
cd.X -= 2;
= info.srWindow.Bottom/3+2;
switch( pSnake-&ID_option ){
case ID_1:
case ID_2:
cd.Y += 2; break;
case ID_3:
cd.Y += 4; break;
ShowPointer( cd,pSnake-&Flag?std::string("
"):std::string("&&") );
173 //显示存档记录(已测试)
174 void Snake_class::ShowRecord(){
COORD cd = { info.srWindow.Right/2-12, 8 };
//输出记录
SetConsoleCursorPosition( handle, cd );
for( size_t i=0;i&sizeof(Snake_Record)/sizeof(*Snake_Record);++i ){
inopen.open( *(Snake_Record+i) );
if( !inopen || (inopen.get() == EOF && i==0) ){
Show_not();
pSnake-&ID_option = ID_7;//第7个选项标记,在按回车时检测下
if( inopen.get() != EOF ){
UINT _rank, _
++(_mark *= 2);
while( _mark-- )
switch( _rank ){
case first:
std::cout&&"初级"; break;
case middle:
std::cout&&"中级"; break;
case high:
std::cout&&"高级"; break;
std::cout&&"\t\t\t
std::cout&&" ---\t\t\t
cd.Y += 2;
SetConsoleCursorPosition( handle, cd );
inopen.close();
inopen.clear();//重置流状态
std::cout&&"\t
返 回 菜 单";
cd.X = info.srWindow.Right/2-4;
SetConsoleCursorPosition( handle, cd );
std::cout&&"存 档 记 录";
cd.X -=10;
SetConsoleCursorPosition( handle, cd );
std::cout&&"游戏等级\t\t当前分数";
//输出指针
cd.X = info.srWindow.Right/2-14;
switch( pSnake-&ID_option ){
case ID_1:
case ID_2:
cd.Y +=2; break;
case ID_3:
cd.Y +=4; break;
case ID_4:
cd.Y +=6; break;
case ID_5:
cd.Y +=8; break;
case ID_6:
cd.Y +=10;break;
ShowPointer( cd,pSnake-&Flag?std::string("
"):std::string("&&") );
239 //读取记录
240 bool Snake_class::Read( size_t i ){
std::ifstream inopen( *(Snake_Record+i) );
if( inopen.get() == EOF ){
std::cout&&"\a";
inopen.close();
return false;
inopen&&pSnake-&Snake_
pSnake-&Snake_coord.clear();
for( int n=1;n&=pSnake-&Snake_++n ){
inopen&&cd.X&&cd.Y ;
pSnake-&Snake_coord.push_back( cd );
inopen&&pSnake-&rank&&pSnake-&mark&&pSnake-&
inopen.close();
inopen.clear();
return true;
260 //显示英雄榜(未测试)
261 void Snake_class::ShowArmory(){
short nt=0;
COORD cd = { info.srWindow.Right/3, info.srWindow.Bottom/3 };
for( size_t i=0;i&sizeof(S_Armory)/sizeof(*S_Armory);++i ){
UINT _rank=0, _mark=0;
inopen.open( *(S_Armory+i) );
if( !inopen ){
inopen&&_rank&&_
switch( _rank ){
case first:
SetConsoleCursorPosition( handle, cd );
std::cout&&"小牛 :初级\t\t
case middle:
SetConsoleCursorPosition( handle, cd );
std::cout&&"中牛 :中级\t\t
case high:
SetConsoleCursorPosition( handle, cd );
std::cout&&"大牛 :高级\t\t
inopen.close();
inopen.clear();
if( nt == 3 ){
Show_not();
cd.X = info.srWindow.Right/2-3;
SetConsoleCursorPosition( handle, cd );
std::cout&&"英 雄 榜";
cd.X -=10;
SetConsoleCursorPosition( handle,cd );
std::cout&&"\t等 级\t\t分 数";
cd.Y = info.srWindow.Bottom-7;
SetConsoleCursorPosition( handle, cd );
std::cout&&"按回车返回主菜单........";
309 //死亡界面(未测试)
310 void Snake_class::Die(){
COORD cd = { info.srWindow.Right/2-10, info.srWindow.Bottom/5 };
SetConsoleCursorPosition( handle, cd );
std::cout&&"
您 已 x_x 了 !";
char *str[] = { "返 回 菜 单",
"退 出 游 戏" };
316 //输出菜单选项
short X = info.srWindow.Right/2;
cd.X = X/2-5 ;
cd.Y = info.srWindow.Bottom/3*2-4;
for( size_t i=0;i&sizeof(str)/sizeof(*str);++i ){
SetConsoleCursorPosition( handle, cd );
std::cout&&*(str+i);
cd.X += X;
326 //判断指针应指向的菜单选项
switch( pSnake-&ID_option ){
case ID_1:
cd.X = X/2-7; break;
case ID_2:
cd.X = X/2+X-7; break;
ShowPointer( cd,pSnake-&Flag?std::string("
"):std::string("&&") );
if( Jesus() ){
cd.X = X/2;
cd.Y = info.srWindow.Bottom/3;
SetConsoleCursorPosition( handle, cd );
std::cout&&"哟...这分? ╮(╯▽╰)╭ 也能上榜。。。!";
SetConsoleCursorPosition( handle, cd );
std::cout&&"上榜等级:";
switch( pSnake-&rank ){
case first:
std::cout&&"初级"; break;
case middle:
std::cout&&"中级"; break;
case high:
std::cout&&"高级"; break;
std::cout&&"\t上榜分数:"&&pSnake-&
354 //存储记录文件(完成未测试)
355 size_t Snake_class::Create_file(){
size_t fn=0, fc=0, iend = sizeof(Snake_Record)/sizeof(*Snake_Record);
//判断文件是否存在或文件已被存满
for( size_t i=0;i&++i ){
inopen.open( *(Snake_Record+i) );
if( !inopen ) ++
else if( inopen.get() == EOF ){
inopen.close();
else { ++ inopen.close(); }
if( fn == iend || fc == iend ){
//创建文本
for( size_t i=0;i&++i ){
outopen.open( *(Snake_Record+i) );
outopen.close();
//返回打开成功的文件索引
return 0 ;
380 //判断死亡(未测试)
381 void Snake_class::JudgeDie(){
std::vector&COORD&::iterator hbeg = pSnake-&Snake_coord.begin(),
beg = hbeg+1;
while( beg != pSnake-&Snake_coord.end() ){
if( beg-&X == hbeg-&X && beg-&Y == hbeg-&Y ){
pSnake-&state = FALSE;
if(hbeg-&X &= 0 || hbeg-&Y &= 0 ||
hbeg-&X &=info.srWindow.Right || hbeg-&Y &= info.srWindow.Bottom-5 ){
if( pSnake-&Snake_size & 40 ){
pSnake-&state = FALSE;
//如果达到了40级可以穿墙
switch( pSnake-&key ){
case VK_UP:
cd.X = pSnake-&Snake_coord.begin()-&X ;
cd.Y = info.srWindow.Bottom-6;
case VK_DOWN:
cd.X = pSnake-&Snake_coord.begin()-&X ;
case VK_LEFT:
cd.X = info.srWindow.Right-1;
cd.Y = pSnake-&Snake_coord.begin()-&Y ;
case VK_RIGHT:
cd.Y = pSnake-&Snake_coord.begin()-&Y ;
ShowSnake( cd );
421 //上榜判断(未测试)
422 bool Snake_class::Jesus(){
//判断相应等级打开相应文件
switch( pSnake-&rank ){
case first:
i=0; break;
case middle:
i=1; break;
case high:
i=2; break;
inopen.open( *(S_Armory+i) );
if( inopen ){
inopen&&_mark&&_
if( _mark &= pSnake-&mark ){
inopen.close();
return FALSE;
std::ofstream outopen( *(S_Armory+i) );//创建文件并输入
if( !outopen ){
std::cerr&&"打开英雄榜文件出错"&&std::
outopen&&pSnake-&rank&&" "&&pSnake-&
outopen.close();
return TRUE;
452 //显示蛇(未测试)
453 void Snake_class::ShowSnake( COORD& cd){
if( cd.X == pSnake-&food_coord.X && cd.Y == pSnake-&food_coord.Y ){
//在最后添加一个坐标
pSnake-&Snake_coord.push_back( *(pSnake-&Snake_coord.rbegin()) );
pSnake-&food_coord.X = pSnake-&food_coord.Y = 0;//标志食物已被吃掉
++pSnake-&
++pSnake-&Snake_
cod.X = (pSnake-&Snake_coord.rbegin())-&X ;
cod.Y = (pSnake-&Snake_coord.rbegin())-&Y ;
std::vector&COORD&::reverse_iterator rbeg = pSnake-&Snake_coord.rbegin();
while( rbeg != pSnake-&Snake_coord.rend()-1 ){
rbeg-&X = (rbeg+1)-&X ;
rbeg-&Y = (rbeg+1)-&Y ;
pSnake-&Snake_coord.begin()-&X = cd.X ;
pSnake-&Snake_coord.begin()-&Y = cd.Y ;
for( std::vector&COORD&::iterator beg = pSnake-&Snake_coord.begin();
beg != pSnake-&Snake_coord.end();++beg ){
SetConsoleCursorPosition( handle, *beg );
std::cout&&"*";
SetConsoleCursorPosition( handle,cod );
std::cout&&" ";
482 //显示指针(完成)
483 inline void Snake_class::ShowPointer( COORD cd,std::string str ){
SetConsoleCursorPosition( handle, cd );
std::cout&&str[0];
pSnake-&ID_interface != ID_6?cd.X += 14:cd.X = info.srWindow.Right/3*2+3;
SetConsoleCursorPosition( handle, cd );
std::cout&&str[1];
491 //显示无数据(完成)
492 inline void Snake_class::Show_not(){
COORD cd = { info.srWindow.Right/2-4 ,info.srWindow.Bottom/2 };
SetConsoleCursorPosition( handle, cd );
std::cout&&"无 数 据 !";
cd.X -= 6;
cd.Y += 2;
SetConsoleCursorPosition( handle, cd );
std::cout&&"请按回车返回主菜单......";
main.cpp :
1 #include&iostream&
2 #include&direct.h&
3 #include"Snake_Class.h"
5 #define _max(ID) --snake.ID_option & ID_1?ID : snake.ID_option
6 #define _min(ID) ++snake.ID_option & ID?ID_1 : snake.ID_option
8 //钩子过程
9 LRESULT CALLBACK _HookProc(int,WPARAM,LPARAM);
11 void Wall();
//画墙函数
12 void Frame();
//画框函数
13 void initialize_();//初始化蛇结构数据
16 Snake_class csnake(&snake);
17 static HANDLE
//控制台句柄
18 //控制台信息结构
19 static CONSOLE_SCREEN_BUFFER_INFO
21 int main(){
using namespace
//获取输出缓冲区句柄
handle = GetStdHandle(STD_OUTPUT_HANDLE);
//获取相关信息(主要是缓冲区大小)
GetConsoleScreenBufferInfo( handle, &info );
initialize_();
_mkdir( "d://SnakeRecord" ); //创建目录
CONSOLE_CURSOR_INFO
//光标结构
cursor.dwSize = 10;
cursor.bVisible = 0;
//0为隐藏光标
SetConsoleCursorInfo(handle, &cursor);//设置隐藏光标函数
//csnake.ShowMenu();
//相应的钩子有相应的过程函数MSDN中可看,安装键盘钩子
hook = SetWindowsHookEx(WH_KEYBOARD_LL,_HookProc,GetModuleHandle(NULL),0);
//判断蛇是否还活着
if( !snake.state && snake.ID_interface == ID_2 ){
//csnake.Die();
snake.ID_interface = ID_4;
if( snake.ID_interface == ID_2 ){
csnake.StartGame();
Sleep( snake.rank );
if( PeekMessage(&msg,NULL,0,0,PM_REMOVE) ){//循环接收消息
TranslateMessage(&msg);
DispatchMessage(&msg);
UnhookWindowsHookEx( hook );
//卸载钩子
62 //定义钩子过程(未完成)
63 LRESULT CALLBACK _HookProc(int message, WPARAM wParam, LPARAM lParam){
//判断是否弹起按键消息
if( wParam == WM_KEYUP){
bool state = true;
switch(((LPKBDLLHOOKSTRUCT) lParam)-&vkCode){//lParam:指向一个结构
//按下上键
case VK_UP:
switch( snake.ID_interface ){
case ID_1:
snake.Flag = true;
csnake.ShowMenu();
snake.Flag = false;
snake.ID_option = _max( ID_5 );
csnake.ShowMenu();
case ID_2:
if( snake.key != VK_DOWN && snake.key != VK_UP ){
snake.key = VK_UP;
case ID_5:
snake.Flag = true;
csnake.ShowRank();
snake.ID_option = _max( ID_3 );
snake.Flag = false;
csnake.ShowRank();
case ID_6:
snake.Flag = true;
csnake.ShowRecord();
snake.ID_option = _max( ID_6 );
snake.Flag = false;
csnake.ShowRecord();
//按下下键
case VK_DOWN:
switch( snake.ID_interface ){
case ID_1:
snake.Flag = true;
csnake.ShowMenu();
snake.Flag = false;
snake.ID_option = _min( ID_5 );
csnake.ShowMenu();
case ID_2:
if( snake.key != VK_UP && snake.key != VK_DOWN ){
snake.key = VK_DOWN;
case ID_5:
snake.Flag = true;
csnake.ShowRank();
snake.ID_option = _min( ID_3 );
snake.Flag = false;
csnake.ShowRank();
case ID_6:
snake.Flag = true;
csnake.ShowRecord();
snake.ID_option = _min( ID_6 );
snake.Flag = false;
csnake.ShowRecord();
//按下左键
case VK_LEFT:
switch( snake.ID_interface ){
case ID_2:
if( snake.key != VK_RIGHT && snake.key != VK_LEFT ){
snake.key = VK_LEFT;
case ID_3:
snake.Flag = true;
csnake.ShowPause();
snake.ID_option = _max( ID_3 );
snake.Flag = false;
csnake.ShowPause();
case ID_4:
snake.Flag = true;
csnake.Die();
snake.ID_option = _max( ID_2 );
snake.Flag = false;
csnake.Die();
//按下右键
case VK_RIGHT:
switch( snake.ID_interface ){
case ID_2:
if( snake.key != VK_LEFT && snake.key != VK_RIGHT ){
snake.key = VK_RIGHT;
case ID_3:
snake.Flag = true;
csnake.ShowPause();
snake.ID_option = _min( ID_3 );
snake.Flag = false;
csnake.ShowPause();
case ID_4:
snake.Flag = true;
csnake.Die();
snake.ID_option = _min( ID_2 );
snake.Flag = false;
csnake.Die();
//按下空格和回车键
case VK_SPACE:
case VK_RETURN:
system( "cls" );
switch( snake.ID_interface ){
case ID_1://主菜单界面
switch( snake.ID_option ){
case ID_1:
snake.ID_interface = ID_2;//开始游戏界面ID
csnake.StartGame();
case ID_2:
snake.ID_interface = ID_5;//等级界面
snake.ID_option = ID_1;
//csnake.ShowRank();
case ID_3:
snake.ID_interface = ID_6;//读取记录界面
snake.ID_option = ID_1;
csnake.ShowRecord();
case ID_4:
snake.ID_interface = ID_7;//英雄榜界面
csnake.ShowArmory();
case ID_5:
state = false;
case ID_2://游戏界面
snake.ID_interface = ID_3;
snake.ID_option = ID_1;
//csnake.ShowPause();
case ID_3://暂停界面
switch( snake.ID_option ){
case ID_1:
snake.ID_interface = ID_2;
csnake.StartGame();
case ID_2:
csnake.SaveRecord();
case ID_3:
state = false;
case ID_4://死亡界面
switch( snake.ID_option ){
case ID_1:
snake.ID_interface = ID_1;
snake.ID_option = ID_1;
initialize_();
csnake.ShowMenu();
case ID_2:
state = false;
case ID_5://等级界面
switch( snake.ID_option ){
case ID_1:
snake.rank =
case ID_2:
snake.rank =
case ID_3:
snake.rank =
snake.ID_interface = ID_1;
snake.ID_option = ID_1;
csnake.ShowMenu();
case ID_6://读取界面
switch( snake.ID_option ){
case ID_1:
id = 0; break;
case ID_2:
id = 1; break;
case ID_3:
id = 2; break;
case ID_4:
id = 3; break;
case ID_5:
id = 4; break;
//进行读取文件
if( snake.ID_option != ID_6&&snake.ID_option != ID_7 ){
initialize_();
if( csnake.Read( id ) ){
snake.ID_interface = ID_2;
csnake.StartGame();
else snake.ID_interface = ID_6;
snake.ID_interface = ID_1;
snake.ID_option = ID_1;
csnake.ShowMenu();
case ID_7://英雄榜界面
snake.ID_interface = ID_1;
snake.ID_option = ID_1;
csnake.ShowMenu();
if( !state ){
COORD cd = { info.srWindow.Right/4, info.srWindow.Bottom/5*4 };
SetConsoleCursorPosition( handle,cd );
snake.ID_option = ID_1;
//消息传给下个钩子
return CallNextHookEx ( NULL, message, wParam, lParam );
312 //画墙函数和调用相应界面(已测试完成)
313 void Wall(){
COORD coord = { 0,0 };
//坐标结构
316 //绘墙
SetConsoleCursorPosition( handle, coord );
for( i=0;i&=info.srWindow.R++i )
std::cout&&"#";
coord.X = info.srWindow.R
coord.Y = 1;
for( i=1;i&info.srWindow.B++i ){
SetConsoleCursorPosition( handle, coord );
std::cout&&"#";
++coord.Y ;
coord.X = 0;
coord.Y = info.srWindow.B
for( i=1;i&=info.srWindow.R++i ){
SetConsoleCursorPosition( handle, coord );
std::cout&&"#";
++coord.X ;
coord.X = 0;
coord.Y = 1;
for( i=1;i&info.srWindow.B++i ){
SetConsoleCursorPosition( handle, coord );
std::cout&&"#";
++coord.Y ;
344 //判断所在界面显示相关界面的菜单选项及其它
int j = info.srWindow.Right/4;
switch( snake.ID_interface ){
case ID_1:
csnake.ShowMenu();
coord.Y = info.srWindow.Bottom-6;
SetConsoleCursorPosition( handle, coord );
std::cout&&"o(-\"-)o
\\(^o^)/";
break;//显示菜单选项
case ID_2:
case ID_3:
case ID_4:
//绘输出信息框
coord.X = 1;
coord.Y = info.srWindow.Bottom - 5;
SetConsoleCursorPosition( handle, coord );
for( i=1;i&info.srWindow.R std::cout&&"#", ++i );
for( coord.X=j;coord.X&=info.srWindow.Right-j;coord.X+=j ){
coord.Y = info.srWindow.Bottom - 5;
for( i=coord.Y;i&info.srWindow.B++i ){
SetConsoleCursorPosition( handle, coord );
std::cout&&"#";
++coord.Y ;
//输出每个框的信息
coord.X = 2;
coord.Y-= 4;
SetConsoleCursorPosition( handle, coord );
std::cout&&"游戏难度:";
coord.Y +=2;
SetConsoleCursorPosition( handle, coord );
std::cout&&"\t
switch( snake.rank ){
case first:
std::cout&&"初 级"; break;
case middle:
std::cout&&"中 级"; break;
case high:
std::cout&&"高 级"; break;
//当前分数
coord.X +=
coord.Y -= 2;
SetConsoleCursorPosition( handle, coord );
std::cout&&"
当 前 分 数";
coord.X +=j/2-3;
coord.Y +=2;
SetConsoleCursorPosition( handle, coord );
std::cout&&snake.
//操作说明
coord.X = j*2+1;
coord.Y = info.srWindow.Bottom -4;
SetConsoleCursorPosition( handle, coord );
std::cout&&" 操作说明: ";
coord.Y +=2;
SetConsoleCursorPosition( handle, coord );
std::cout&&"
++coord.Y;
SetConsoleCursorPosition( handle, coord );
std::cout&&" 空格: 暂停游戏";
coord.X +=
SetConsoleCursorPosition( handle, coord );
std::cout&&"\t制作人: _ 翼";
case ID_5:
csnake.ShowRank(); break;//显示游戏等级
case ID_6:
csnake.ShowRecord(); break;//显示存档记录
case ID_7:
csnake.ShowArmory(); break;//显示英雄榜
425 //画框函数(完成)
426 void Frame(){
COORD coord = { 0, info.srWindow.Bottom/3 };
SetConsoleCursorPosition( handle, coord );
for( short i=0;i&=info.srWindow.R std::cout&&"-", ++i );
coord.Y = info.srWindow.Bottom/3*2;
SetConsoleCursorPosition( handle, coord );
for( short i=0;i&=info.srWindow.R std::cout&&"-", ++i );
switch( snake.ID_interface ){
case ID_3:
csnake.ShowPause(); break;//显示暂停菜单
case ID_4:
csnake.Die(); break;//显示死亡界面菜单
case ID_5:
csnake.ShowRank(); break;//显示等级选项
445 //初始化蛇数据(完成)
446 void initialize_(){
snake.state = true; //蛇状态
snake.Snake_size = 5; //蛇初始化长度
//初始化蛇位置
snake.Snake_coord.clear();
for( size_t i=10;i&5;--i ){
snake.Snake_coord.push_back( cd );
snake.food_coord.X = 0;
snake.food_coord.Y = 0;
snake.rank =
//默认等级
snake.mark = 0; //分数
snake.key = VK_RIGHT;
snake.ID_interface = ID_1;//界面标记
snake.ID_option = ID_1;
//选项标记
snake.Flag = false;
随笔 - 195

我要回帖

更多关于 c 简易版五子棋源码 的文章

 

随机推荐