闲暇时间我用C语言写出来一个开心消消乐

是这样,当我突然无聊决定把开心消消乐这款游戏下回来救村长的时候,我脑海里灵机一动,决定自己上号写一个

先来看看效果图吧

玩法就是跟消消乐的一样,让三个或更多的相同图案排列成一行或者一列即可消除,但是开心消消乐是闯关制,这个是时间制,时间到了游戏就结束了。

把代码贴下面:

////////////////////////////////////////////////////////////
//画素材的x和y都是反的,因为x表示行,但是画出来x表示列,y同
////////////////////////////////////////////////////////////

#include <graphics.h>
#include <fstream>
#include <strstream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#pragma comment(lib, "Winmm.lib")
using namespace std;


/*******************************定义枚举类型*****************************/
enum color{blank, red, yellow, blue, green, white, orange, purple, shizijia, zhadan, qicai, alarm};


/*******************************定义全局变量*****************************/
const int MaxT = 12;	// 时间上限
const int T = 10 * MaxT;// 时间速度
const int V = 300;		// 停留时间
clock_t start, now;		// 控制时间
color gem[9][8];		// 地图
						// IMAGE对象
IMAGE img[12], music_img[2], exit_img, jindutiao;
int Score, Time;		// 成绩 时间
bool Flag, Music = true;// 是否加载 音乐


/**********************************函数声明*****************************/
void load(void);	// 加载IMAGE对象
void Blank(void);	// 清空
bool soso(void);	// 搜索空格
bool baidu(void);	// 搜索解法
void New(void);		// 更新
void print(void);	// 输出
bool judge(void);	// 判断是否可以消除
void fall(void);	// 下落
void draw(void);	// 消除
bool quit(void);	// 是否重新开始
void play(void);	// 游戏过程


/**********************************定义函数*****************************/
void load(void)
{
	char c[20];
	int i;

	// 加载IMAGE对象
	for (i = 0; i < 12; i++)
	{
		ostrstream strout(c, 50);
		strout <<"图片\\" <<i <<".jpg" <<ends;
		loadimage(&img[i], c);
	}
	loadimage(&music_img[0], "图片\\音乐关.jpg");
	loadimage(&music_img[1], "图片\\音乐开.jpg");
	loadimage(&exit_img, "图片\\退出.jpg");
	loadimage(&jindutiao, "图片\\进度条.jpg");

	// 加载音乐
	mciSendString("open 背景音乐.mp3 alias mymusic", NULL, 0, NULL);

	// 随机种子
	srand(unsigned(time(NULL)));

	// 打开文件
	ifstream fin("存档.dat");
	if (!fin)
		throw -1;	// 如果打开失败则抛出异常

	// 读存档
	fin >>Flag >>Music;
	if (Flag)
	{
		HWND wnd = GetHWnd();
		SetWindowText(wnd, "对对碰");
		if (MessageBox(wnd, "是否继续上次游戏?", "游戏开始", MB_YESNO | MB_ICONQUESTION) == IDYES)
		{
			fin >>Score >>Time;
			for (i = 0; i < 9; i++)
				for (int j = 0; j < 8; j++)
				{
					int t;
					fin >>t;
					gem[i][j] = color(t);
				}
		}
		else
			Flag = false;
	}
	fin.close(
当然可以!开心消消是一款非常经典的益智游戏,下面是一个简单的Java代码示例,可以供您参考: ```java import java.util.Scanner; public class HappyEliminationGame { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); // 游戏面板的大小 int[][] board = new int[n][n]; // 存储游戏面板 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { board[i][j] = scanner.nextInt(); // 初始化游戏面板 } } int score = 0; // 玩家得分 while (true) { boolean hasEliminated = false; // 是否有方块被消除 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (board[i][j] != 0 && canEliminate(board, i, j)) { // 如果当前方块可以被消除 score += board[i][j]; // 加分 board[i][j] = 0; // 消除方块 hasEliminated = true; } } } if (!hasEliminated) { // 如果没有方块被消除,游戏结束 break; } dropDown(board); // 方块下落 refill(board); // 填充新方块 } System.out.println("游戏结束,得分为:" + score); } /** * 判断当前方块是否可以被消除 */ public static boolean canEliminate(int[][] board, int row, int col) { int val = board[row][col]; int cnt = 0; // 相同颜色方块的数量 // 向上搜索 for (int i = row - 1; i >= 0; i--) { if (board[i][col] == val) { cnt++; } else { break; } } // 向下搜索 for (int i = row + 1; i < board.length; i++) { if (board[i][col] == val) { cnt++; } else { break; } } if (cnt >= 2) { // 如果相同颜色方块的数量大于等于3,可以被消除 return true; } cnt = 0; // 向左搜索 for (int j = col - 1; j >= 0; j--) { if (board[row][j] == val) { cnt++; } else { break; } } // 向右搜索 for (int j = col + 1; j < board.length; j++) { if (board[row][j] == val) { cnt++; } else { break; } } return cnt >= 2; } /** * 方块下落 */ public static void dropDown(int[][] board) { int n = board.length; for (int j = 0; j < n; j++) { int k = n - 1; for (int i = n - 1; i >= 0; i--) { if (board[i][j] != 0) { int tmp = board[i][j]; board[i][j] = 0; board[k--][j] = tmp; } } } } /** * 填充新方块 */ public static void refill(int[][] board) { int n = board.length; for (int j = 0; j < n; j++) { int k = n - 1; for (int i = n - 1; i >= 0; i--) { if (board[i][j] == 0) { board[i][j] = (int) (Math.random() * 5) + 1; // 随机生成1-5的颜色 if (i < k) { int tmp = board[i][j]; board[i][j] = board[k][j]; board[k][j] = tmp; } k--; } } } } } ``` 该示例代码实现了一个简单的开心消消游戏,您可以根据自己的需求进行修改和完善。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值