UNO小游戏2

前言

hello,大家好我是文宇。最近也是抽出时间更一期了。

bug还是很多(恼),所以就当个乐子看看,反正后面还会有的,先把这玩意儿发了再说。

正文

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
bool can = 1;
int colorsz1[25];
int cardsz1[25];
int colorsz2[25];
int cardsz2[25];
int onecard;
int onecolor;
int cardaa;
int coloraa;
int sj;
int j;
int sr;
string player1;
string player2;
void rule() {
	cout << "  规则:\n";
	cout << "  1.输入牌的位置出牌                         \n";
	cout << "  2.只可以出与当前桌面颜色或数字相同的卡牌   \n";
	cout << "  3.10号卡可以使你的下家增加2张牌            \n";
	cout << "  4.11号卡可以使你的下家无法出牌一回         \n";
	cout << "  5.12号卡可以转换当前颜色                   \n";
	cout << "  6.13号卡可以转换当前颜色,并让下家增加4张牌 \n";
	cout << "  7.其余1~9号卡没有特殊效果                  \n";
	cout << "  8.谁的牌先打完谁就赢了                     \n";
	cout << "  9.明牌打                                   \n";
	cout << "  10.手牌上限为25张                          \n";
	cout << "  11.当你的手牌为25张时你就输了              \n";
	cout << "  12.开局有6张牌                             \n";
	cout << "  13.牌显示为0为空位                         \n";
	return;
}
void statr() {
	cout << "     --------欢迎来到uno游戏---------\n";
	rule();
	cout << "  请输入玩家1的名字:";
	cin >> player1;
	cout << "\n  请输入玩家2的名字:";
	cin >> player2;
	system("cls");
	cout << "游戏开始\n";
	cout << "洗牌ing\n";
	return;
}
void carda() {
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	cardaa = sj;
	sj = rand() % 4 + 1;
	coloraa = sj;
	return;
}
void cards1() {
	for (int i = 0; i <= 6; i++) {
		srand(time(0)*time(0));
		sj = rand() % 13 + 1;
		cardsz1[i] = sj;
		sj = rand() % 4 + 1;
		if (sj == 1) {
			colorsz1[i] = 1;
		}
		if (sj == 2) {
			colorsz1[i] = 2;
		}
		if (sj == 3) {
			colorsz1[i] = 3;
		}
		if (sj == 4) {
			colorsz1[i] = 4;
		}
		_sleep(1000);
	}
	return;
}
void cards2() {
	for (int i = 0; i <= 6; i++) {
		srand(time(0)*time(0));
		sj = rand() % 13 + 1;
		cardsz2[i] = sj;
		sj = rand() % 4 + 1;
		if (sj == 1) {
			colorsz2[i] = 1;
		}
		if (sj == 2) {
			colorsz2[i] = 2;
		}
		if (sj == 3) {
			colorsz2[i] = 3;
		}
		if (sj == 4) {
			colorsz2[i] = 4;
		}
		_sleep(1000);
	}
	return;
}
bool allZero1() {
	int total = 0;
	for (int i = 0; i < 25; i++) {
		if (cardsz1[i] == 0) {
			total++;
		}
	}

	if (total == 25) {
		return true;
	}
	return false;
}
bool allZero2() {
	int total = 0;
	for (int i = 0; i < 25; i++) {
		if (cardsz2[i] == 0) {
			total++;
		}
	}
	if (total == 25) {
		return true;
	}
	return false;
}
void onecards() {
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	onecard = sj;
	sj = rand() % 4 + 1;
	onecolor = sj;
	return;
}
void card10_1() {
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	for (int i = 0; i <= 25; i++) {
		if (cardsz2[i] == 0) {
			cardsz2[i] = sj;
			break;
		}
	}
	sj = rand() % 4 + 1;
	for (int i = 0; i <= 25; i++) {
		if (colorsz2[i] == 0) {
			colorsz2[i] = sj;
			break;
		}
	}

}
void card10_2() {
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	for (int i = 0; i <= 25; i++) {
		if (cardsz1[i] == 0) {
			cardsz1[i] = sj;
			break;
		}
	}
	sj = rand() % 4 + 1;
	for (int i = 0; i <= 25; i++) {
		if (colorsz1[i] == 0) {
			colorsz1[i] = sj;
			break;
		}
	}
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	for (int i = 0; i <= 25; i++) {
		if (cardsz1[i] == 0) {
			cardsz1[i] = sj;
			break;
		}
	}
	sj = rand() % 4 + 1;
	for (int i = 0; i <= 25; i++) {
		if (colorsz1[i] == 0) {
			colorsz1[i] = sj;
			break;
		}
	}
	return;
}
void card12() {
	cout << "转换为红输入1\n";
	cout << "转换为绿输入2\n";
	cout << "转换为蓝输入3\n";
	cout << "转换为黄输入4\n";
	cin >> sr;
	if (sr == 1) onecolor = 1;
	if (sr == 2) onecolor = 2;
	if (sr == 3) onecolor = 3;
	if (sr == 4) onecolor = 4;
	return;

}
void card13_1() {
	cout << "转换为红输入1\n";
	cout << "转换为绿输入2\n";
	cout << "转换为蓝输入3\n";
	cout << "转换为黄输入4\n";
	cin >> sr;
	if (sr == 1) onecolor = 1;
	if (sr == 2) onecolor = 2;
	if (sr == 3) onecolor = 3;
	if (sr == 4) onecolor = 4;
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	for (int i = 0; i <= 25; i++) {
		if (cardsz2[i] == 0) {
			cardsz2[i] = sj;
			break;
		}
	}
	sj = rand() % 4 + 1;
	for (int i = 0; i <= 25; i++) {
		if (colorsz2[i] == 0) {
			colorsz2[i] = sj;
			break;
		}
	}
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	for (int i = 0; i <= 25; i++) {
		if (cardsz2[i] == 0) {
			cardsz2[i] = sj;
			break;
		}
	}
	sj = rand() % 4 + 1;
	for (int i = 0; i <= 25; i++) {
		if (colorsz2[i] == 0) {
			colorsz2[i] = sj;
			break;
		}
	}
	return;
}
void card13_2() {
	cout << "转换为红输入1\n";
	cout << "转换为绿输入2\n";
	cout << "转换为蓝输入3\n";
	cout << "转换为黄输入4\n";
	cin >> sr;
	if (sr == 1) onecolor = 1;
	if (sr == 2) onecolor = 2;
	if (sr == 3) onecolor = 3;
	if (sr == 4) onecolor = 4;
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	for (int i = 0; i <= 25; i++) {
		if (cardsz1[i] == 0) {
			cardsz1[i] = sj;
			break;
		}
	}
	sj = rand() % 4 + 1;
	for (int i = 0; i <= 25; i++) {
		if (colorsz1[i] == 0) {
			colorsz1[i] = sj;
			break;
		}
	}
	srand(time(0)*time(0));
	sj = rand() % 13 + 1;
	for (int i = 0; i <= 25; i++) {
		if (cardsz1[i] == 0) {
			cardsz1[i] = sj;
			break;
		}
	}
	sj = rand() % 4 + 1;
	for (int i = 0; i <= 25; i++) {
		if (colorsz1[i] == 0) {
			colorsz1[i] = sj;
			break;
		}
	}
	return;
}
void display() {
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
	cout << "\n\n玩家1的手牌是:";
	for (int i = 1; i <= 25; i++) {
		if (colorsz1[i] == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); //red
		if (colorsz1[i] == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //green
		if (colorsz1[i] == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE); //blue
		if (colorsz1[i] == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); //yellow
		cout << cardsz1[i] << ' ';
	}
	cout << "\n\n";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
	cout << "玩家2的手牌是:";
	for (int i = 1; i <= 25; i++) {
		if (colorsz2[i] == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); //red
		if (colorsz2[i] == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //green
		if (colorsz2[i] == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE); //blue
		if (colorsz2[i] == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); //yellow
		cout << cardsz2[i] << ' ';
	}
	cout << "\n\n";
	return;
}
int main() {
	statr();
	cards1();
	cards2();
	onecards();
	cardsz1[25] = 0;
	while (1) {
chu1:
		display();
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cout << "\n当前桌面上的牌为:";
		if (onecolor == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); //red
		if (onecolor == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //green
		if (onecolor == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE); //blue
		if (onecolor == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); //yellow
		cout << onecard << "\n";
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		if (allZero1()) {
			cout << player1 << "胜出!\n";
			return 0;
		} else if (allZero2()) {
			cout << player2 << "胜出!\n";
			return 0;
		}
		for (int i = 0; i <= 25; i++) {
			if (cardsz1[i] == onecard || cardsz1[i] == 13 || cardsz1[i] == 12) can = 0;
			if (colorsz1[i] == onecolor) can = 0;
		}
		if (can) {
			cout << "\n你没有可以出的,你获得一张:";
			if (coloraa == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); //red
			if (coloraa == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //green
			if (coloraa == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE); //blue
			if (coloraa == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); //yellow
			cout << cardaa;
		} else {
			cout << player1 << "的回合,选择你的出卡:";
			cin >> sr;
			if ((cardsz1[sr] == onecard || colorsz1[sr] == onecolor || cardsz1[sr] == 12 || cardsz1[sr] == 13) && cardsz1[sr] != 0) {
				onecard = cardsz1[sr];
				onecolor = colorsz1[sr];
				cardsz1[sr] = 0;
				colorsz1[sr] = 0;
				if (cardsz1[sr] == 10) card10_1();
				if (cardsz1[sr] == 11) goto chu1;
				if (cardsz1[sr] == 12) card12();
				if (cardsz1[sr] == 13) card13_1();
			} else {
				cout << "\n不可以出这张\n";
				goto chu1;
			}
		}
		can = 1;
chu2:
		display();
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		cout << "\n当前桌面上的牌为:";
		if (onecolor == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); //red
		if (onecolor == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //green
		if (onecolor == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE); //blue
		if (onecolor == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); //yellow
		cout << onecard << "\n";
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
		for (int i = 0; i <= 25; i++) {
			if (cardsz2[i] == onecard || cardsz2[i] == 13 || cardsz2[i] == 12) can = 0;
			if (colorsz2[i] == onecolor) can = 0;
		}
		if (can) {
			cout << "\n你没有可以出的,你获得一张:";
			if (coloraa == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED); //red
			if (coloraa == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN); //green
			if (coloraa == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE); //blue
			if (coloraa == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); //yellow
			cout << cardaa;
			can = 1;
		} else {
			cout << player2 << "的回合,选择你的出卡:";
			cin >> sr;
			if ((cardsz2[sr] == onecard || colorsz2[sr] == onecolor || cardsz2[sr] == 12 || cardsz2[sr] == 13) && cardsz2[sr] != 0) {
				onecard = cardsz2[sr];
				onecolor = colorsz2[sr];
				cardsz2[sr] = 0;
				colorsz2[sr] = 0;
				if (cardsz2[sr] == 10) card10_2();
				if (cardsz2[sr] == 11) goto chu2;
				if (cardsz2[sr] == 12) card12();
				if (cardsz2[sr] == 13) card13_2();
			} else {
				cout << "\n不可以出这张\n";
				goto chu2;
			}
		}
		can = 1;
	}
	return 0;
}

之前规则的制表符因为一些bug就删了,没办法

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 实现一个完整的UNO网页游戏需要以下几个步骤: 1. 设计页面布局和UI样式,包括游戏主界面、牌堆、手牌、出牌区、玩家信息等。 2. 实现卡牌的展示和交互,包括洗牌、发牌、出牌、抽牌、跳过、翻色等操作。 3. 实现游戏规则和逻辑的处理,包括出牌规则、抽牌规则、胜利条件等。 4. 实现多人游戏模式,包括房间创建、加入、离开、消息通信等。 5. 添加音效和动画效果,提高游戏体验。 下面是一个简单的实现过程: 1. 设计页面布局和UI样式 使用HTML和CSS实现游戏主界面,包括牌堆、手牌、出牌区、玩家信息等。使用JavaScript实现交互效果,包括点击出牌、抽牌、翻色等操作。 2. 实现卡牌的展示和交互 使用JavaScript实现卡牌的展示和交互,包括洗牌、发牌、出牌、抽牌、跳过、翻色等操作。在页面上显示卡牌的花色和数字,当玩家点击卡牌时,将其移动到出牌区域。 3. 实现游戏规则和逻辑的处理 根据UNO游戏规则实现游戏逻辑,包括出牌规则、抽牌规则、胜利条件等。在每个玩家出牌后,检查是否符合出牌规则,如果不符合,则提示玩家重新出牌。当有玩家手中没有牌时,游戏结束,显示胜利信息。 4. 实现多人游戏模式 使用WebSocket实现多人游戏模式,包括房间创建、加入、离开、消息通信等。当玩家加入房间时,向其他玩家发送加入消息,当玩家出牌时,向其他玩家发送出牌消息,当玩家离开房间时,向其他玩家发送离开消息。 5. 添加音效和动画效果 使用HTML5的audio标签添加音效,使用CSS3的animation添加动画效果,提高游戏体验。 以上是一个简单的UNO网页游戏实现过程,具体实现需要根据具体需求进行调整和优化。 ### 回答2: 要使用前端写一个完整的UNO网页游戏,首先需要了解UNO游戏的规则和内部机制。然后,我们可以使用HTML、CSS和JavaScript来实现游戏的前端界面和逻辑。 首先,我们可以使用HTML和CSS来创建游戏的界面。可以使用CSS来设置背景、卡片样式以及其他元素的布局和样式。可以使用HTML来创建游戏中的各个组件,如卡片、玩家区域、计分板等。 接下来,使用JavaScript来实现游戏的逻辑。可以使用JavaScript来处理玩家之间的交互以及游戏的流程。例如,可以使用事件监听来处理玩家的点击动作,判断玩家出牌的合法性,并更新卡片状态。还可以使用JavaScript来处理计分的逻辑,根据玩家出牌情况和规则来计算得分。 为了实现更好的用户体验,我们还可以考虑使用一些前端框架或库来简化开发过程。例如,可以使用React来构建组件化的界面,使用jQuery来简化DOM操作,使用Socket.IO来实现多人在线游戏等。 最后,为了使游戏变得更加完整,我们还可以添加一些额外的功能,如游戏设置选项、音效、动画效果、多种游戏模式等。 总体来说,通过使用HTML、CSS和JavaScript,并借助一些前端框架和库,我们可以非常有创意和挑战性地实现一个完整的UNO网页游戏。 ### 回答3: 使用前端技术编写一个完整的UNO网页游戏是可行的。首先,需要用HTML和CSS创建游戏的界面布局和样式。然后,使用JavaScript来实现游戏的逻辑和交互。 在HTML中,可以创建一个容器来显示玩家的手牌、当前出牌、已出牌和控制按钮等元素。使用CSS来设置样式,使界面看起来像一个真实的UNO游戏。 接下来,在JavaScript中,需要定义一些变量来存储游戏的状态,例如当前玩家、牌堆、出牌堆等。还需要编写一些函数来处理游戏的各种操作,例如发牌、出牌、抽牌、跳过等。 为了实现多人游戏,可以使用WebSocket或者其他的通信技术来实现玩家之间的实时交互。通过监听玩家的操作事件,将其发送给其他玩家并更新游戏状态。 此外,还可以添加一些特殊规则和功能,例如反转方向、+2牌、+4牌等。可以使用JavaScript来添加这些额外的规则,并根据玩家的行动进行相应的处理。 最后,为了提升游戏的可玩性,还可以添加一些动画效果和音效。可以使用CSS的过渡和动画来创建卡牌翻转、牌堆转动等动态效果。同时可以使用HTML5的音频播放功能添加一些游戏音效。 总的来说,使用前端技术编写一个完整的UNO网页游戏是有挑战性的,但是通过合理的规划和设计,可以实现一个具有可玩性和交互性的游戏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文宇炽筱

有一个打赏就多写十篇文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值