用C++语言实现小游戏2048

<pre name="code" class="cpp">#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <cstdio>
#include <windows.h>
using namespace std;
int num[4][4];
int a[4][4];
bool test();
int main() {
	char again = 'a';
	int theHighestScore; 
	FILE *fp;
	fp = fopen("E:\\record.txt", "r");
	int i = fread(&theHighestScore, sizeof(int), 1, fp);
	if (i == 0) {
		theHighestScore = 0;
	}
	fclose(fp);
	while (again != ' ') {
		bool endWay = true;
		int t = 0;
		int score = 0;
		int end = 1;
		for (int i = 0; i < 4; i++) {
			for (int j = 0; j < 4; j++) {
				num[i][j] = 0;
			}
		}
		num[rand() % 4][rand() % 4] = 2;
		while (end != 2048) {
		//以下是每次移动就出现一个二
			system("cls");
			cout << "\t\t2048" << endl;
			cout << "\t\tScore:" << score << endl;
			cout << "\t\tThe highest score:" << theHighestScore << endl;
			cout << "**********************************************" << endl;
			int x = rand() % 4;
			int y = rand() % 4;
			int n = 0;
			for (int i = 0; i < 4; i++) {
				for (int j = 0; j < 4; j++) {
					if (num[i][j]) {
						n++;
					}
				}
			}
			if (n != 16) {
				while (num[x][y]) {
					x = rand() % 4;
					y = rand() % 4;
				}
				int ran = rand() % 5;
				//百分之20的几率出现4,百分之80出现2(没搞清楚2048的2和4是以什么比例形式出现的,就随便设计了) 
				if (t == 1) {
					if (ran >= 0 && ran <= 3) {
						num[x][y] = 2;
					}
					else {
						num[x][y] = 4;
					}
					t = 0;
				}
			}
<span style="white-space:pre">			</span>//输出图形
			printf ("\t┏━━┳━━┳━━┳━━┓\n");
			for (int i = 0; i < 4; i++) {
				printf("\t┃");
				for (int j = 0; j < 4; j++) {
					if (num[i][j]) {
						printf("%4d┃", num[i][j]);
					}
					else {
						printf("    ┃");
					}
				}
				printf("\n");
				if (i == 3) {
					printf ("\t┗━━┻━━┻━━┻━━┛\n");
				}
				else {
					printf ("\t┣━━╋━━╋━━╋━━┫\n");
				}
			}
			char ch = _getch(); 
			//移动(这里的算法想复杂了,应该可以简化) 
			if (ch == 'w') {
				for (int j = 0; j < 4; j++) {
					for (int i = 3; i >= 1; i--) {
						if (num[i][j] != 0 && num[i - 1][j] == 0) {
							num[i - 1][j] = num[i][j];
							num[i][j] = 0;
							t = 1;
						}
					}
					for (int i = 3; i >= 1; i--) {
						if (num[i][j] != 0 && num[i - 1][j] == 0) {
							num[i - 1][j] = num[i][j];
							num[i][j] = 0;
							t = 1;
						}
					}
					for (int i = 3; i >= 1; i--) {
						if (num[i][j] != 0 && num[i - 1][j] &
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值