俄罗斯方块(C语言,VC++,EasyX图形库)

网盘链接 提取码:3639)(不常登录csdn,有问题可邮件 z_limbo@foxmail.com 联系)
如题所示,基于EasyX图形库,在VC++6.0中的小程序。

在当前目录中须有如下文件:
Alt
其中,music中须有:
Alt
picture中须有:
Alt
运行结果:
Alt

Alt

代码(IDE为VC++6.0,须装载EasyX库):

#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <ctype.h>
#pragma comment(lib, "winmm.lib")
#define WIDTH 640      
#define HIGH 480
#define GAME_WIDTH 15    //游戏区横列格子数
#define GAME_HIGH 28   //游戏区竖排格子数
#define BOX_WIDTH 15     //一个格子的宽度
#define BOX_HIGH 15     //一个格子的长度

//函数声明
void startup();  //初始化
void show();     //图像显示
void gameover();  //游戏结束设置
void fourKinds(int four[4][4], int kind); // 新的形状图形
void updateWithInput();   //无输入更新
void updateWithoutInput();  //有输入更新
void transformation();  //变形
void startMenu();    //开始菜单
void pauseStart();    //暂停菜单
void playMusicOnce(CHAR *musicName);  //播放音效一次
void readRecord();  //读档
void writeRecord();  //存档

//全局变量
int GAME_CONDITION = 1; // 游戏状态,1为开始菜单, 0为退出, 2 为正式游戏

int board[GAME_WIDTH + 2][GAME_HIGH + 2];  //游戏区
int nowFour[4][4];       //现在图形
int nextFour[4][4];     // 下一个图形
int nowKind;            //现在图形种类
int nextKind;          //下一个图形种类
int four_x, four_y;  //图形位置
int vY;
COLORREF color;        //图形颜色
int pre_x, pre_y;   //预告位置
int score;           //分数(整形形式)
int levelUp;    //等级
int beginWidth, beginHigh;  //游戏区开始
bool isFail;   //游戏失败
bool isPause;  //游戏暂停
bool isMedi;  //游戏中断
bool isArchive;  //存档成功
bool isMusic;  //音乐
IMAGE img_bk;   //背景图片
MOUSEMSG m;    //鼠标控制
int mouse_x, mouse_y;
int choice;  //鼠标选择
int i, j, k;

//函数定义
// 播放音效一次
void playMusicOnce(CHAR * musicName) {
   
   
	CHAR playMusic[50] = "open ";
	strcat(playMusic, musicName);
	strcat(playMusic, " alias tempMusic");
	mciSendString("close tempMusic", NULL, 0, NULL);
	mciSendString(playMusic, NULL, 0, NULL);
	mciSendString("play tempMusic", NULL, 0, NULL);
}

//读档
void readRecord() {
   
   
	startup();
	//背景音乐
	mciSendString("close bkMusic1", NULL, 0, NULL);
	mciSendString("open .\\music\\bk2.mp3 alias bkMusic2", NULL, 0, NULL);
	mciSendString("play bkMusic2 repeat", NULL, 0, NULL);
	FILE *fp;
	fp = fopen( "record.txt", "r");
	int n;
	fscanf(fp, "%d", &n);
	if (n == -1) {
   
   
		fscanf(fp, "%d %d %d %d %d %d %d %d", &score, &levelUp, &isFail, &isMusic, &four_x, &four_y, &nowKind, &nextKind);
		for (i = 0; i < 4; i++)
			for (j = 0; j < 4; j++)
				fscanf(fp, "%d ", &nowFour[i][j]);
		for (i = 0; i < 4; i++)
			for (j = 0; j < 4; j++)
				fscanf(fp, "%d ", &nextFour[i][j]);
		for (i = 1; i <= GAME_WIDTH; i++)
			for (j = 1; j <= GAME_HIGH; j++)
				fscanf(fp, "%d ", &board[i][j]);
		GAME_CONDITION = 2;
	}
	fclose(fp);
	if(!isMusic) mciSendString("pause bkMusic2", NULL, 0, NULL);
}

//存档
void writeRecord() {
   
   
	FILE * fp;
	fp = fopen("record.txt", "w");
	fprintf(fp, "%d\n\n", -1);
	fprintf(fp, "%d %d %d %d %d %d %d %d\n\n", score, levelUp, isFail, isMusic, four_x, four_y, nowKind, nextKind);
	for (i = 0; i < 4; i++) {
   
   
		for (j = 0; j < 4; j++)
			fprintf(fp, "%d ", nowFour[i][j]);
		fprintf(fp, "\n");
	}
	fprintf(fp, "\n");
	for (i = 0; i < 4; i++) {
   
   
		for (j = 0; j < 4; j++)
			fprintf(fp, "%d ", nextFour[i][j]);
		fprintf(fp, "\n");
	}
	fprintf(fp, "\n");
	for (i = 1; i <= GAME_WIDTH; i++) {
   
   
		for (j = 1; j <= GAME_HIGH; j++)
			fprintf(fp, "%d ", board[i][j]);
		fprintf(fp, "\n");
	}
	fclose(fp);
	isArchive = true;
}

//开始菜单
void startMenu() {
   
   
	putimage(0, 0, &img_bk);
	setbkmode(TRANSPARENT);

	settextcolor(GREEN);
	settextstyle(64, 0, _T("华文琥珀"));
	outtextxy(WIDTH * 0.25, HIGH * 0.08, _T("俄罗斯方块"));
	setcolor(WHITE);
	settextstyle(16, 0, _T("楷体"));
	outtextxy(WIDTH * 0.42, HIGH * 0.25, _T("作者:Dora ^-^"));
	/*setcolor(BLUE);
	setfillcolor(RGB(200,200,200));
	fillrectangle(WIDTH * 0.39, HIGH * 0.33, WIDTH * 0.61, HIGH * 0.43);
	fillrectangle(WIDTH * 0.39, HIGH * 0.48, WIDTH * 0.61, HIGH * 0.58);
	fillrectangle(WIDTH * 0.39, HIGH * 0.63, WIDTH * 0.61, HIGH * 0.73);
	fillrectangle(WIDTH * 0.39, HIGH * 0.78, WIDTH * 0.61, HIGH * 0.88);*/

	if (MouseHit()) {
   
   
		m = GetMouseMsg();   // 获取鼠标信息
		mouse_x = m.x;
		mouse_y = m.y;
		if (m.uMsg == WM_LBUTTONUP) {
   
   
			if (choice == 1) {
   
   
				GAME_CONDITION = 2;
				playMusicOnce(".\\music\\mouse.wav");
				Sleep(500);
				mciSendString("close bkMusic1", NULL, 0, NULL);
				mciSendString("open .\\music\\bk2.mp3 alias bkMusic2", NULL, 0, NULL);
				if (isMusic) {
   
   
					if (isMedi) mciSendString("resume bkMusic2", NULL, 0, NULL);
					else mciSendString("play bkMusic2 repeat", NULL, 0, NULL);
				}
			}
			else if (choice == 2) {
   
    readRecord(); playMusicOnce(".\\music\\mouse.wav"); isPause = true; }
			else if (choice == 3) {
   
    writeRecord(); playMusicOnce(".\\music\\mouse.wav"); }
			else if (choice == 4) {
   
    playMusicOnce(".\\music\\mouse.wav"); Sleep(100); gameover(); }
		}
	}

	choice = 0;
	settextcolor(WHITE);
	if (mouse_x >= WIDTH * 0.39 && mouse_x <= WIDTH * 0.61 && mouse_y >= HIGH * 0.33 && mouse_y <= HIGH * 0.43) {
   
   
		settextstyle(32, 0, _T("华文彩云"));
		choice = 1;
	}
	else settextstyle(32, 0, _T("楷体"));
	if (isMedi) outtextxy(WIDTH * 0.4, HIGH * 0.35, _T("继续游戏"));
	else outtextxy(WIDTH * 0.4, HIGH * 0.35, _T("开始游戏"));

	if (mouse_x >= WIDTH * 0.39 && mouse_x <= WIDTH * 0.61 && mouse_y >= HIGH * 0.48 && mouse_y <= HIGH * 0.58) {
   
   
		settextstyle(32, 0, _T("华文彩云"));
		choice = 2;
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值