C语言写石头剪刀布实现

/*
石头剪刀布
玩家, 结构体,来定义
玩家的名字
target  石头剪刀布 (宏定义)
history  (三局两胜) 
winer  弹框提示	
**/
//game.c
#include "game.h"
#include "defines3.h"
#include "windows.h"
#include <stdio.h>
#include <string.h>

Role red;   //这里需要全局变量,赋值调用。 
Role blue;
Role *role_red =&red;
Role *role_blue =&blue;

char *core(int r,int m){
	int count = r-m;
	const char *msg = count==0?"平":(count==-2||count==1)?"赢":"输";
	return msg;
}

//把手势的协议转换成字符串
const char *toString(int r){
	const char *msg="";
	switch(r){
		case 1:
			msg="剪刀";
			break;
		case 2:
			msg = "石头";
			break;
		case 3:
			msg = "布";
			break;
		default:
			printf("error.....\n");
	}
	return msg;
} 

//出手势的函数
void action(Role *role){

	int a;
	error:	
	printf("请%s出手势\n",role->name);
	scanf("%d",&a);
	//判断如果输入的不是123,则重新输入
	if(CHECK(a)==0){
		printf("手势错误!!!");
		goto error;              //校验手势		
	}
	role->current = a;
	printf("哇擦类%s出了%s\n",role->name,toString(role->current)); 

} 
//初始化数据 
void init(){
	
	role_red->name ="文大帅哥";
	role_blue->name ="大坏蛋";
	red.fire = &action;
	blue.fire = &action;
} 
//开始游戏的函数
void run(){

	gaming:
	init();
	role_red->fire(role_red);
	role_blue->fire(role_blue);
	const char *result =core(role_blue->current,role_red->current);
	printf("%s获得%s\n",role_red->name,core(role_red->current,role_blue->current));
	if(strcmp(result,"赢")){
		role_blue->score+=1;
		printf("%s取得%d分\n",role_blue->name,role_blue->score);
	}
	if(strcmp(result,"输")){
	    role_red->score+=1;
	    printf("%s取得%d分\n",role_red->name,role_red->score);
	}
	if(role_blue->score!=3&&role_red->score!=3){
		goto gaming;		
	}else{
		const char *title = "";
		title= role_blue->score==3?title="蓝方胜":"红方胜";
		MessageBox(NULL,title,"",MB_OK); 
		role_blue->score = 0;
		role_red->score = 0;
	}
	
} 

void startGame(){
	run();
} 
//defines3.h
#pragma once

#define SHI_TOU 1
#define JIAN_DAO 2
#define BU 3 

//校验手势的正确性 ,宏定义
#define CHECK(a)(a==SHI_TOU||a==JIAN_DAO||a==BU) 

//函数指针类型   -----自定义指针 
typedef void (*Function) ();

typedef struct _Role{

	const char *name;  //角色名字 
	int current;    // 当前手势 
	int score; //赢得次数 
	Function fire;  //出手势的行为 
}Role; 

//game.h

#pragma once
void startGame();
//main.c

#include <stdio.h>
#include <stdlib.h>
#include "defines3.h"


/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    startGame();
    return 0;
 }

结束,简单的C语言实现小游戏,运用了许多C的性质,指针。。。等很有学习意义。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
河北工业大学计算机软件技术基础(VC) 课程设计任务书 题目:人机对战——石头剪刀布 目的与要求 目的 通过编该程序,培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,培养学生利用系统提供的标准函数及典型算法进行设计,并对Windows平台下的控制台进行深入的了解。 基本要求 要求用C++语言编程,在Visual C++环境下调试完成; 要求划分功能模块,各个功能分别使用函数来完成; 源代码程序要求必要的注释。 设计方法和基本原理 课题功能描述 编一个人机进行石头剪刀布小游戏。要求能够进行完一轮猜拳后,显示统计信息。每一轮游戏的过程是首先由玩家选择要出的拳,然后计算机选择出拳,输出本轮游戏的胜负情况,然后输出统计信息(玩家胜利次数、计算机胜利次数和平局次数),然后每轮猜拳结束后,询问玩家是否要继续游戏。游戏界面如下: 主要技术问题的描述 随机函数 随机函数名为rand(),使用时必须包含头文件stdlib.h。 创新要求 在基本要求达到后,进行创新设计: 程序要保证计算机的胜利次数至少是玩家胜利次数的1.5倍。 课程设计的考核方式及评分方法 考核方式 (1) 学生要提交书面课程设计报告(A4纸打印);并将设计报告的电子文档、.cpp源文件和.h头文件放到一个文件夹里上传到所对应班级的学生名称相应文件夹中。 (2) 课程设计结束时,在机房当场验收。教师提供测试数据,由学生运行所设计的系统,检查运行结果是否正确,并回答教师提出的有关问题。 评分方法 根据出勤率、课程设计期间纪律、课程设计运行结果、课程设计报告及答辩情况综合评分。 书设计报告的要求(详细内容见“设计报告模板”) 课程设计的有关文档“设计报告模板”和“课程设计要求”请在下载任务书处下载。    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值