c猜拳游戏

赋予程序判断和思维

利用经验来决定出拳的猜拳游戏程序示例
#include <stdio.h>
#include <stdlib.h>

void main() {
	//对手的出拳
	int human;
	
	//假设对手刚才出了拳头
	int prev=0;
	
	//记忆对手出拳信息二维数组(上一次出,下一次就出什么的次数)
	int memory[3][3]={{0,0,0},{0,0,0},{0,0,0}};
	
	//记录对手的出拳信息
	int max;
	
	//猜拳的回合数
	int counter=0;
	
	//计算机的出拳
	int computer;
	
	//设置随机种子
	srand(time(NULL)); 
	
	while(-1){
		//对手决定出拳信息
		printf("石头,,,剪刀,,,布!\n");
		scanf("%d",&human);
		
		
		//输入0,1,2以外的值结束
		if(human>=3||human<=-1)
		break;
		
		//记录回合数
		counter++;
		 
		//机器决定出拳信息
		if(counter<10)
		//低于十次,随机出拳 
		computer=rand()%3;
		//高于十次,根据记忆出拳 
		else
		max=0;
		if(memory[prev][max]<memory[prev][1]) max=1;
		if(memory[prev][max]<memory[prev][2]) max=2;
		computer=(max+2)%3;
		//机器出拳 
		if(computer==0)
		printf("机器出石头\n");
		else if(computer==1)
		printf("机器出剪刀\n");
		else
		printf("机器出布\n");
		
		//记录对手出拳信息
		memory[prev][human]++;
		prev=human;
		
		
				 
	}
	
	// 
	return 0;
}
   我们用数组memory保存了对手的出拳信息,数组索引0,1,2分别代表了石头,剪
刀,布。就记忆功能来说,计算机无疑比人强大很多,对程序进行一些改造,比如
使计算机记住“对手出石头胜利后会出剪刀,出石头输了接下来会出布”这些细节信
息,计算机会更擅长猜拳游戏。(数组改成memory[6][3],记录prev胜负信息)
根据思维模式来决定出拳的猜拳游戏程序示例
#include <stdio.h>
#include <stdlib.h>


int main() {
	//保存思维模式的二维数组
	int pattern[2][4]={{0,0,2,1},{1,0,0,2}}; 
	
	//保存失败次数
	int lose=0;
	
	//用来切换思维方式
	int p=0;
	
	//用思维方式决定出拳信息
	int n=0; 
	
	// 记录计算机出拳信息
	int computer;
	
	//记录人的出拳信息
	int human;
	
	while(-1){
		//对手决定出拳信息
		printf("石头,,,剪刀,,,布!\n");
		scanf("%d",&human);
		if(human<0||human>2)
		break;
		//机器决定出拳信息
		computer=pattern[p][n];
		n=(n+1)%4;
		//机器出拳 
		if(computer==0)
		printf("机器出石头\n");
		else if(computer==1)
		printf("机器出剪刀\n");
		else
		printf("机器出布\n");
		
		
		//如果连续输4次,就切换思维模式
		if((human==0&&computer==1)||(human==1&&computer==2)||human==2&&computer==0)
		lose++;   
		else
		lose=0;
		
		if(lose>=2){
		p=(p+1)%2;
		n=0;}
		 
	}
	 
	return 0;
}
运行该程序后,大家会察觉到“该计算机有自己的出拳方式”,接近人类的思维模式
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值