资源简介

这是一个用 C 语言设计的连连看小游戏,这个资源里面不仅有程序源代码,而且还有详细的 PPT 说明文档,对于刚开始接触游戏设计的编程爱好者来说,可以提供一定的帮助。 这个程序只是一个构思的框架,界面不是特别华丽,但是对于需要理解编程思路的人来说,一样是一个不错的起点。

资源截图

代码片段和文件信息

// MatchIt.cpp : 小游戏《连连看》基本框架
//
// 版本:0.3
//
// 制作:马森阳
//
// 制作时间:2013.2.16 - 2013.3.5
//
// 详细内容请参阅程序目录下的 PPT 说明。
//
// http://hi.baidu.com/masenyang

#include “stdafx.h“


/*定义标题栏*/
#define title “连连看 V0.3,C 语言版“

/*定义真假宏*/
#define FALSE 0
#define TRUE 1

/*定义行列数*/
#define ROW 8
#define COL 10

/*定义图案种类数*/
#define TOTAL 20

/*定义无效标识*/
#define NONE 0

/*定义特殊按键*/
#define BAK 0x08
#define ENT 0x0d
#define ESC 0x1b
#define SPC 0x20

/*声明程序中的类*/
class Matchit;                      //连连看类,设计游戏基本操作框架
class LangPack;                     //语言包类,用于游戏中的信息提示

/*定义 连连看 类*/
class Matchit{

protected:

int pic[TOTAL];                 //图案集合
int stack[ROW*COL];             //卡堆
int board[ROW+2][COL+2];        //游戏板

int cursor_Rcursor_C;          //光标位(行、列)
int select_Rselect_C;          //选定位(行、列)

int cur_Level;                  //当前级别(EASY NORMAL HARD)
int cur_Stage;                  //当前关卡(0~10)

int rem_Card;                   //剩余卡片数
int rem_Time;                   //剩余时间量
int rem_Hint;                   //剩余提示数
int rem_Life;                   //剩余生命值

char hint_Msg[64];              //游戏过程中的提示信息

public:

/*类的构造方法*/
Matchit(){
int ij;
for(i=0;i pic[i]=i+1;
}
for(i=0;i stack[i]=NONE;
}
for(j=0;j for(i=0;i board[j][i]=NONE;
}
}
cur_Level=0;
cur_Stage=0;
rem_Card=rem_Time=rem_Hint=rem_Life=0;
cursor_R=cursor_C=NONE;
select_R=select_C=NONE;
strcpy(hint_Msg““);
}

/*游戏之前的待命状态*/
int standby(){
char k;
int f=FALSE;
system(“cls“);
puts(title);
putchar(‘\n‘);
puts(“请选择游戏级别:(测试版只提供初级)“);
puts(“[  1  ] 初级“);
puts(“[ ESC ] 退出游戏“);
printf(“选择:“);
do{
k=getch();
switch(k){
case ‘1‘:
cur_Level=1;
cur_Stage=0;
rem_Life=5;
rem_Hint=10;
starter();
f=TRUE;
break;
case ESC:
f=FALSE;
break;
}
}while(k!=‘1‘ && k!=ESC);
return f;
}

/*游戏开始前的准备工作*/
void starter(){
int ijkcf;
int n=ROW*COL;
srand(unsigned(time(0)));
for(i=0;i stack[i]=pic[i%TOTAL];
}
for(j=1;j<=ROW;j++){
for(i=1;i<=COL;i++){
c=rand()%n;
board[j][i]=stack[c];
n--;
for(k=c;k stack[k]=stack[k+1];
}
}
}
rem_Card=ROW*COL;
f=is_Legal();
if(!f) discard();
cursor_R=cursor_C=1;
select_R=select_C=0;
strcpy(hint_Msg“游戏开始,请按屏幕下方的提示进行操作。“);
}

/*游戏进行中*/
int playing(){
int f=FALSE;
display();
do{
if(rem_Card==0){
f=ending_Next();
break;
}
else if(!is_Legal() && rem_Life==0){
f=ending_Dead();
break;
}
else if(!is_Legal() && rem_Life>0){
discard();
rem_Life--;
strcpy(hint_Msg“【注意】牌局出现无解画面,自动扣除一点生命值进行洗牌。“);
display();
}
f=key_Press();
}while(f);
return f;
}

/*游戏过程中读取按键内容进行相应操作,通过返回值决定是否退出程序*/
int key_Press(){
cha

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-03-08 21:38  Matchit\
     目录           0  2013-03-08 21:38  Matchit\Debug\
     文件      184414  2013-03-08 21:38  Matchit\Debug\Matchit.exe
     文件      304396  2013-03-08 21:38  Matchit\Debug\Matchit.ilk
     文件       37278  2013-03-08 21:38  Matchit\Debug\Matchit.obj
     文件      227632  2013-02-28 17:40  Matchit\Debug\Matchit.pch
     文件      517120  2013-03-08 21:38  Matchit\Debug\Matchit.pdb
     文件        2331  2013-02-28 17:40  Matchit\Debug\StdAfx.obj
     文件       41984  2013-03-08 21:38  Matchit\Debug\vc60.idb
     文件       61440  2013-03-08 21:38  Matchit\Debug\vc60.pdb
     文件       14786  2013-03-08 21:38  Matchit\Matchit.cpp
     文件        4548  2013-02-28 17:38  Matchit\Matchit.dsp
     文件         539  2013-02-28 17:38  Matchit\Matchit.dsw
     文件       50176  2013-03-08 21:38  Matchit\Matchit.ncb
     文件       53760  2013-03-08 21:38  Matchit\Matchit.opt
     文件        1330  2013-03-08 21:38  Matchit\Matchit.plg
     文件        1214  2013-02-28 17:38  Matchit\ReadMe.txt
     文件         294  2013-02-28 17:38  Matchit\StdAfx.cpp
     文件         768  2013-02-28 17:40  Matchit\StdAfx.h
     文件      364544  2013-03-08 21:36  Matchit\《连连看》说明.ppt

评论

共有 条评论