C语言编程练习(10)——cmd实现 猜拳游戏(剪刀石头布)

cmd实现 猜拳游戏(剪刀石头布)

使用工具:VS2019

程序介绍:

  1. 游戏菜单
  2. 游戏初始化(玩家数据和电脑数据)
  3. 开始游戏
  4. 判定结果
  5. 计算得分
  6. 展示得分
  7. 谁最终赢了

规则:三局两胜
0:石头 1:剪子 2:布


一、代码部分

头文件game.h:

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

struct GAMEROLE
{
    
    
	char name[10];
	int hand;
	int score;
}player, computer;

//1.游戏菜单
void gameMenu();
//2.游戏初始化(玩家数据和电脑数据)
void gameInit(int hand1, int hand2, int score1, int score2);
//3.开始游戏
void startGame(int hand1, int hand2);
//4.判定结果
int judgeGame(int hand1, int hand2);
//5.计算得分
void calculateScore(int whoWin);
//6.展示得分
void showScore();
//7.谁最终赢了
int whoFinallyWin(int score1, int score2);

源文件game.c:

#include "game.h"

//1.游戏菜单
void gameMenu()
{
    
    
	printf("----------------\n");
	printf("!  start game  !\n");
	printf("----------------\n");
}
//2.游戏初始化(玩家数据和电脑数据)
void gameInit(int hand1, int hand2, int score1, int score2)
{
    
    
	player.hand = hand1;		//玩家出拳
	player.score = score1;		//玩家得分
	computer.hand = hand2;		//电脑出拳
	computer.score = score2;	//电脑的分
}
//3.开始游戏
void startGame(int hand1, int hand2)
{
    
    
	switch (hand1)				//输出玩家的手势
	{
    
    
	case 0:
		printf("Player`s hand is STONE!\n");
		break;
	case 1:
		printf("Player`s hand is CUT!\n");
		break;
	case 2:
		printf("Player`s hand is PAPER!\n");
		break;
	default:
		break;
	}
	switch (hand2)				//输出电脑的手势
	{
    
    
	case 0:
		printf("Computer`s hand is STONE!\n");
		break;
	case 1:
		printf("Computer`s hand is CUT!\n");
		break;
	case 2:
		printf("Computer`s hand is PAPER!\n");
		break;
	default:
		break;
	}
}

//4.判定结果
int judgeGame(int hand1, int hand2)
{
    
    
	switch (hand1 - hand2)
	{
    
    
	case -1:
	case 2:
		return 1;
	case 0:
		return 0;
	case -2:
	case 1:
		return -1;
	default:
		return 999;
	}
}

//5.计算得分
void calculateScore(int whoWin)
{
    
    
	switch (whoWin)
	{
    
    
	case 1:
		++player.score;
		break;
	case 0:
		break;
	case -1:
		++computer.score;
		break;
	default:
		break;
	}
}

//6.展示得分
void showScore()
{
    
    
	printf("player`s name:%s\n", player.name);
	printf("player`s score:%d\n", player.score);

	printf("computer`s name:%s\n", computer.name);
	printf("computer`s score:%d\n", computer.score);
}

//7.谁最终赢了
int whoFinallyWin(int score1, int score2)
{
    
    
	if (score1 > score2)
		return 1;
	else if (score1 == score2)
		return 0;
	else
		return -1;
}

源文件main.c:

#include "game.h"

int main()
{
    
    
	srand((unsigned)time(NULL));
	int level = 0;
	//1.游戏菜单
	gameMenu();
	puts("\n");
	//2.游戏初始化(玩家数据和电脑数据)
	printf("Input player`s name:\n");
	scanf_s("%s", player.name, 10);
	printf("Input computer`s name:\n");
	scanf_s("%s", computer.name, 10);
	gameInit(0, 0, 0, 0);
	puts("\n");
	
	//三局
	while (level < 3)
	{
    
    
		//3.开始游戏
		int hand1 = 0, hand2 = 0;
		printf("Player`s hand(0~2) is:\n");
		scanf_s("%d", &hand1);
		while (hand1 < 0 || hand1>2)
		{
    
    
			printf("Error!\n");
			printf("Player`s hand is:\n");
			scanf_s("%d", &hand1);
		}
		hand2 = rand() % 3;
		startGame(hand1, hand2);
		puts("\n");

		//4.判定结果
		int playerWin = judgeGame(hand1, hand2);
		if (playerWin == 1)
		{
    
    
			printf("Player WIN!!!\n");
		}
		else if (playerWin == 0)
		{
    
    
			printf("No one WIN!!!\n");
		}
		else if (playerWin == -1)
		{
    
    
			printf("Player LOSE!!!\n");
		}
		else
		{
    
    
			printf("ERROR!!!\n");
		}
		puts("\n");
		//5.计算得分
		calculateScore(playerWin);

		//6.展示得分
		showScore();
		puts("\n");

		++level;
	}
	
	//7.谁最终赢了
	int WIN_FLAG = whoFinallyWin(player.score, computer.score);
	if (WIN_FLAG == 1)
	{
    
    
		printf("%s WIN!!!\n", player.name);
	}
	else if (WIN_FLAG == 0)
	{
    
    
		printf("NO ONE WIN!!!\n");
	}
	else if (WIN_FLAG == -1)
	{
    
    
		printf("%s WIN!!!\n", computer.name);
	}

	system("pause");
	return 0;
}

二、运行结果

(三局两胜制)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44739914/article/details/112250578