连连看的程序c语言,连连看游戏源程序

最近在唯C论坛上看到一个连连看游戏,这也正是我想做的一个游戏,不过一直没有付之实践,呵呵,没想到有人捷足先登了哈。下下来一看,恩,不错,不过就是缺点音乐,要是加是音乐和音效那就更完美了。作者功底可不小哦:)。部分源文件如下(由于源文件太长,不是很方便发上来,就发了一个原作品里的头文件),点上面的连接下载整个源程序和编译好的作品,很好玩的啦!推荐大家下下来研究!!!)

#define MAX_X 16

#define MAX_Y 9

#define MAX_CHAR 36

#define MAX_GUAN 6

/* 0-9: number

10-35: lowercase

36-61: capital letter

62-76: other char

>76: don’t use it, fill with FILL.CHAR

*/

/* easy: x=12, y=7, char=21

normal: x=14, y=8, char=xx

hard: x=16, y=9, char=36

*/

#define SUPPER_FAST 1

#define SELECTED_COLOR 2 /* green */

#define CUR_COLOR 4 /* red */

#define NORMAL_COLOR 7

#define LINK_CHAR ‘.’

#define FILL_CHAR 176

#define DISP_X 2

#define DISP_Y 2

#define SCREEN_X 80

#define SCREEN_Y 25

#define MAX_BANK 20

#define CHOOSE_NOW 1

#define CHOOSE_OUTSIDE 1

#define CHOOSE_INSIDE 2

#define CHOOSE_UP 3

#define CHOOSE_ALL 4

/* detail of link type define see file lian.doc */

#define LINK_NONE 0

#define LINK_0P1 1

#define LINK_0P2 2

#define LINK_1P31 3

#define LINK_1P32 4

#define LINK_1P41 5

#define LINK_1P42 6

#define LINK_21P11 7

#define LINK_21P12 8

#define LINK_21P21 9

#define LINK_21P22 10

#define LINK_21P41 11

#define LINK_21P42 12

#define LINK_22P31 13

#define LINK_22P32 14

#define LINK_22P41 15

#define LINK_22P42 16

#define FINISH_DONE 1

#define FINISH_DIE 2

#define FINISH_ESC 3

#define MATRIX_FILE “Matrix.txt”

#define SPACE 0×20

#define ENTER 0x0d

#define ESC 0x1b

#define ARROW_UP 72

#define ARROW_DOWN 80

#define ARROW_LEFT 75

#define ARROW_RIGHT 77

#define F1 59

#define F2 60

#define F3 61

#define F4 62

#define F5 63

#define F6 64

#define F7 65

#define F8 66

#define F9 67

#define F10 68

/* ——————— */

#define SAME_PERCENT 0.8

#define BMP_FILE “Lian_all.bmp”

/* this file must be 16 colors (4 bits) */

#define DRAW_START_X 50

#define DRAW_START_Y 20

#define DRAW_MSG_Y 430

#define EMPTY_CHAR 0xff

/* =============================== */

/* Define of LianLianKan   */

/* =============================== */

#define MAX_UNIT_X MAX_X

#define MAX_UNIT_Y MAX_Y

/* Easy: 12*7, Normal: 14*8, Hard: 16*9 */

#define UNIT_WIDE_ALL 40

#define UNIT_HIGH_ALL 50

#define WIDE_FROM 3

#define HIGH_FROM 3

#define UNIT_WIDE 32

#define UNIT_HIGH 42

/* 方块 = 40×50,包括边框1(左上角)

空白的黑色部分(左上角) = 宽度-6;高度-6 (包括边框)

右下角阴影 = 宽度,高度-2 */

#define START_FROM_X 190

#define START_FROM_Y 203

/* default of hard is: 190, 203 */

/* =============================== */

/* Struct Define of BMP file  */

/* =============================== */

/* 1. BMP文件头

BMP文件头数据结构含有BMP文件的类型、文件大小和位图起始位置等信息 */

typedef struct tagBITMAPFILEHEADER

{

int bfType; /* 位图文件的类型,必须为BM */ /* offset: 0 */

long bfSize; /* 位图文件的大小,以字节为单位 */ /* offset: 2 */

int bfReserved1; /* 位图文件保留字,必须为0 */ /* offset: 6 */

int bfReserved2; /* 位图文件保留字,必须为0 */ /* offset: 8 */

long bfOffBits; /* 位图数据的起始位置,以相对于位图 / /* offset: 0x0a */

/* 文件头的偏移量表示,以字节为单位 */

} BITMAPFILEHEADER;

/* 2. 位图信息头

BMP位图信息头数据用于说明位图的尺寸等信息。 */

typedef struct tagBITMAPINFOHEADER

{

long biSize; /* 本结构所占用字节数 */ /* offset: 0x0e */

long biWidth; /* 位图的宽度,以像素为单位 */ /* offset: 0×12 */

long biHeight; /* 位图的高度,以像素为单位 / /* offset: 0×16 */

int biPlanes; /* 目标设备的级别,必须为1 */ /* offset: 0x1a */

int biBitCount;/* 每个像素所需的位数,必须是1(双色), / /* offset: 0x1c */

/* 4(16色),8(256色)或24(真彩色)之一 */

long biCompression; /* 位图压缩类型,必须是 0(不压缩), */ /* offset: 0x1e */

/* 1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一 */

long biSizeImage; /* 位图的大小,以字节为单位 */

long biXPelsPerMeter; /* 位图水平分辨率,每米像素数 */

long biYPelsPerMeter; /* 位图垂直分辨率,每米像素数 */

long biClrUsed;/* 位图实际使用的颜色表中的颜色数 */

long biClrImportant;/* 位图显示过程中重要的颜色数 */

} BITMAPINFOHEADER;

/* 3. 颜色表 I don’t care */

/* 4. 位图数据

位图数据记录了位图的每一个像素值,记录顺序是在扫描行内是从左到右,扫描行之间是从下到上。位图的一个像素值所占的字节数:

当biBitCount=1时,8个像素占1个字节;

当biBitCount=4时,2个像素占1个字节;

当biBitCount=8时,1个像素占1个字节;

当biBitCount=24时,1个像素占3个字节;

Windows规定一个扫描行所占的字节数必须是

4的倍数(即以long为单位),不足的以0填充,

一个扫描行所占的字节数计算方法:

DataSizePerLine= (biWidth* biBitCount+31)/8;

// 一个扫描行所占的字节数

DataSizePerLine= DataSizePerLine/4*4; // 字节数必须是4的倍数

位图数据的大小(不压缩情况下):

DataSize= DataSizePerLine* biHeight;

*/

/* =============================== */

/*    Mouse     */

/* =============================== */

/*

/*鼠标信息宏定义*/

#define WAITING 0xff00

#define LEFTPRESS 0xff01

#define LEFTCLICK 0xff10

#define LEFTDRAG 0xff19

#define RIGHTPRESS 0xff02

#define RIGHTCLICK 0xff20

#define RIGHTDRAG 0xff2a

#define MIDDLEPRESS 0xff04

#define MIDDLECLICK 0xff40

#define MIDDLEDRAG 0xff4c

#define MOUSEMOVE 0xff08

#define BY_KEY 1

#define BY_MOUSE 2

#define BY_COMPUTER 3

/* ————————– */

#include “stdio.h”

#include “conio.h”

#include “dos.h”

#include “stdlib.h”

#include “time.h”

#include “process.h”

#include “ctype.h”

#include “math.h”

#include “graphics.h”

void DispPlayTime(void);

void HideCur(void);

void GetGuan(void);

void GetNextGuan(void);

void MatrixInitial(void);

void CreatMatrix(void);

void MatrixDisp(void);

void DealKey(void);

void MatrixSave(void);

void MatrixLoad(void);

int CanLink(void);

void LinkDisp(void);

int IsMatrixEmpty(void);

int IsMatrixDie(void);

void ReArrangeMatrix(void);

void FindLinkPair(void);

void ClearSelectBank(void);

int SameSelected(void);

void DispAllLink(void);

void UnDispAllLink(void);

int ChooseFromBank(void);

int CheckLink(void);

void ResetCur(void);

char KeyPress(void);

void SwapSelected(void);

void IsLink0p1(void);

void IsLink0p2(void);

void IsLink1p31(void);

void IsLink1p32(void);

void IsLink1p41(void);

void IsLink1p42(void);

void IsLink21p11(void);

void IsLink21p12(void);

void IsLink21p21(void);

void IsLink21p22(void);

void IsLink21p41(void);

void IsLink21p42(void);

void IsLink22p31(void);

void IsLink22p32(void);

void IsLink22p41(void);

void IsLink22p42(void);

void MatrixMove(void);

/* —————- */

void OpenBmpFile(void);

void GetFileInfo(void);

void GetUnit(void);

void ClearMatrix(void);

void FillMatrix(void);

int UnitEmpty(void);

int UnitInList(void);

void CopyChar(unsigned char *to_unit, unsigned char *from_unit);

int CompareChar(unsigned char *unit1, unsigned char *unit2);

void MatrixConvert(void);

int ColorConvert(int ccolor);

void InitialGraph(void);

void DrawUnit(int CharNum);

void DrawUnitS(int CharNum);

void DrawUnitC(int CharNum);

int GetCharNum(void);

void ClearMsgLine(void);

void ClearSelected(void);

/* —— mouse program ———– */

void MouseMath(void);

void MouseOn(int x,int y);

void MouseOff(void);

void MouseLoad(void);

void MouseReset(void);

void MouseSetX(int lx,int rx);

void MouseSetY(int uy,int dy);

void MouseSetXY(int x,int y);

void MouseSpeed(int vx,int vy);

int LeftPress(void);

int MiddlePress(void);

int RightPress(void);

void MouseGetXY(void);

void InitialMouse(void);

void GetMouseCur(void);

void DealMouse(void);

unsigned char matrix[MAX_X+1][MAX_Y+1]; /* x,y use from 1 */ /* if char = 0, means it is empty */

int selected1x, selected1y;

int selected2x, selected2y; /* if = 0 means not selected yet */

int FinishFlag; /* 0 – not finish, other – see finish code define */

char KeyScan;

int LinkType;

int type2xy; /* record the x or y of the link path of type2x.x, example: type 22p42

path is from 1 go up to type2xy(y), then go righ, then go down.

type2xy get its value in function Can.Link(), and use in Link.Disp() */

int curx,cury;

int AutoGoMode=0;

struct time starttime,endtime;

/* ——–here is for store and choose a selected —— */

struct SelectStruct

{

int x1,y1;

int x2,y2;

int type;

int xy2;

};

typedef struct SelectStruct SELECTED;

SELECTED SelectBank[MAX_BANK];

int BankCounter;

int guan;

/* —— here is for grap disp ———- */

BITMAPFILEHEADER FileHead;

BITMAPINFOHEADER InfoHead;

unsigned char *OneLine;

int DataSizePerLine;

int unitx,unity;

unsigned char OneUnit[UNIT_HIGH][UNIT_WIDE];

#define OneUnitSize UNIT_HIGH*UNIT_WIDE

FILE *fp; /* it is use for the BMP file only */

unsigned char CharList[MAX_CHAR][OneUnitSize];

int CharCounter[MAX_CHAR];

int MaxChar=0;

char dispstr[80];

/* ——- here is for mouse  ———– */

int PressState;

int MouseExist;

int MouseButton;

int MouseX;

int MouseY;

int up[16][16],down[16][16],mouse_draw[16][16],pixel_save[16][16];

int SelectedBy;

int MouseCurX,MouseCurY;

/* ———————– */

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值