游戏规则:玩家电脑各发2张牌,玩家两张牌均为明牌,电脑一明一暗;玩家根据点数大小选择是否继续要牌,当玩家点数为21点时玩家直接获胜,超过21点电脑获胜;当玩家选择不要牌,开始电脑回合,电脑点数大于21点玩家获胜,电脑点数大于等于玩家,电脑获胜。

    目录

1、打印欢迎界面

2、打印牌池和初始手牌 

3、玩家回合 

4、电脑回合 

5、设置筹码 

6、代码总览 


1、打印欢迎界面

int main()
{
	playgame();
	return 0;
}
void playgame()
{
	int input = 0;
	do
	{
		welcome();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("开始游戏\n");
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
}
void welcome()
{
	printf("******************************\n");
	printf("**********  21点 *************\n");
	printf("***  1.play        0.exit  ***\n");
	printf("******************************\n");
}

2、打印牌池和初始手牌 

(1)添加game()函数

void playgame()
{
	int input = 0;
	do
	{
		...
        ...
		{
		case 1:
			printf("开始游戏\n");
            game();
			break;
		...
        ...
		}
	} while (input);
}
			

 (2)创建game.h 和 game.c 用于游戏主程序

//text.c

#include "game.h"

void game()
{
	int board[ROW][COL] = { 0 };
	int PlayerCard[13] = { 0 };
	int ComputerCard[13] = { 0 };
	initial(board, ROW, COL, PlayerCard, ComputerCard);
	show(board, ROW, COL);
	Computer(board, ROW, COL, ComputerCard);
	Player(board, ROW, COL, PlayerCard);
}

 //game.h

#define ROW 4
#define COL 13
#include<stdio.h>
#include<time.h>
#include<Windows.h>

void initial(int board[ROW][COL], int row, int col, int PlayerCard[],int ComputerCard[]);
void show(int board[ROW][COL], int row, int col);
void Computer(int board[ROW][COL], int row, int col,int ComputerCard[]);
void Player(int board[ROW][COL], int row, int col, int PlayerCard[]);

//game.c

#include"game.h"

void initial(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[])
{
	int i = 0;
	int j = 0;
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < col;j++)
		{
			if (j < 9)
				board[i][j] = j + 1;
			else
				board[i][j] = 10;
		}
	}
	for (i = 0;i < 13;i++)
	{
		PlayerCard[i] = 0;
		ComputerCard[i] = 0;
	}
}

void show(int board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("牌池:\n");
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < col;j++)
		{
			printf("%d ", board[i][j]);
		}
		printf("\n");
	}
}

int give(int board[ROW][COL], int row, int col)
{
	int card = 0;
	while (1)
	{
		int i = rand() % row;
		int j = rand() % col;
		if (board[i][j] != 0)
		{
			card = board[i][j];
			board[i][j] = 0;
			break;
		}
	}
	return card;
}

void Computer(int board[ROW][COL], int row, int col,int ComputerCard[])
{
	int i = 0;
	int flag = 0;
	ComputerCard[0] = give(board, ROW, COL);
	ComputerCard[1] = give(board, ROW, COL);
	Sleep(300);
	printf("电脑手牌:[?] %d\n", ComputerCard[1]);
}

void Player(int board[ROW][COL], int row, int col,int PlayerCard[])
{
	int i = 0;
	int flag = 0;
	PlayerCard[0] = give(board, ROW, COL);
	PlayerCard[1] = give(board, ROW, COL);
	Sleep(300);
	printf("玩家手牌:%d %d\n", PlayerCard[0], PlayerCard[1]);
}

(3)效果展示 

3、玩家回合 

(1)创建round()函数

//test.c

void game()
{
    ...
    ...
	Player(board, ROW, COL, PlayerCard);
	Round(board, ROW, COL, PlayerCard, ComputerCard);
}

//game.h

void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[]);

//game.c

int test(int Card[], int time)
{
	int i = 0;
	int sum = 0;
	for (i = 0;i < time;i++)
	{
		sum += Card[i];
		Sleep(300);
		printf("%d ", Card[i]);
	}
	printf("\n");
	return sum;
}

void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[])
{
	int input = 0;
	int time_P = 2;
	int sum_P = PlayerCard[0] + PlayerCard[1];
	int i = 0;
	printf("玩家回合开始\n");
	do
	{
		printf("玩家是否继续要牌?1.是 0.否>>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			sum_P = 0;
			PlayerCard[time_P] = give(board, ROW, COL);
			time_P++;
			printf("玩家手牌:");
			sum_P = test(PlayerCard, time_P);
			if (sum_P > 21)
			{
				printf("玩家点数为%d,超过21点,电脑获胜!\n", sum_P);
				input = 0;
			}
			if (sum_P == 21)
			{
				printf("玩家点数为21点,玩家获胜!\n");
				input = 0;
			}
			break;
		case 0:
			printf("玩家回合结束,电脑回合开始\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
}

 (2)效果展示

4、电脑回合 

(1)代码实现

//game.c

void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[])
{
    case 0:
			printf("玩家回合结束,电脑回合开始\n");
			Sleep(300);
			printf("玩家手牌:");
			for (i = 0;i < time_P;i++)
			{
				printf("%d ", PlayerCard[i]);
			}
			printf("\n");
			Sleep(300);
			printf("电脑手牌:%d %d\n", ComputerCard[0], ComputerCard[1]);
			C_Round(board, ROW, COL, PlayerCard, ComputerCard, time_P, sum_P);
			break;
}
void C_Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[], int time_P, int sum_P)
{
	int i = 0;
	int time_C = 2;
	int sum_C = ComputerCard[0] + ComputerCard[1];
	while (sum_C < sum_P && sum_C < 21)
	{
		ComputerCard[time_C] = give(board, ROW, COL);
		time_C++;
		Sleep(500);
		printf("电脑手牌:");
		sum_C = test(ComputerCard, time_C);
	}
	if (sum_C > 21)
	{
		printf("电脑点数为%d,超过21点,玩家获胜!\n", sum_C);
	}
	else if (sum_C >= sum_P)
	{
		printf("电脑点数为%d,玩家点数为%d,电脑获胜!\n", sum_C,sum_P);
	}
}

(2)效果展示

5、设置筹码 

(1)代码实现

//game.h

#define CHIP 1000

void Round(int board[ROW][COL], ..., int ComputerCard[],int* chip);

//test.c

int chip = CHIP;

void playgame()
{
	int input = 0;
	do
	{
		if (chip <= 0)
		{
			printf("没有足够的筹码进行下一轮游戏,游戏结束!\n");
			break;
		}
		welcome();
        ...
        ...
	} while (input);
}
void game()
{
    ...
    ...
	show(board, ROW, COL);
	printf("玩家筹码:%d\n", chip);
    ...
	Player(board, ROW, COL, PlayerCard);
	Round(board, ROW, COL, PlayerCard, ComputerCard, &chip);
	printf("玩家筹码:%d\n", chip);
}

//game.c

void C_Round(int board[ROW][COL], ..., int sum_P, int* chips)
{
	...
    ...
	if (sum_C > 21)
	{
		...
		*chips += 90;
	}
	else if (sum_C >= sum_P)
	{
		...
		*chips -= 100;
	}
}
		

void Round(int board[ROW][COL], ..., int ComputerCard[],int *chip)
{
	...
    ...
	int chips = *chip;
	printf("玩家回合开始\n");
	do 
	{
		...
        ...
		switch (input)
		{
		case 1:
			...    
            ...
			if (sum_P > 21)
			{
				...
				*chip -= 100;
				...
			}
			if (sum_P == 21)
			{
				...
				*chip += 90;
				...
			}
			break;
		case 0:
			...
            ...
			C_Round(board, ..., sum_P, &chips);
			*chip = chips;
			break;
		...
        ...
		}
	} while (input);	
}

 (2)效果展示

6、代码总览 

//test.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"

int chip = CHIP;

void welcome()
{
	printf("******************************\n");
	printf("**********  21点 *************\n");
	printf("***  1.play        0.exit  ***\n");
	printf("******************************\n");
}

void game()
{
	int board[ROW][COL] = { 0 };
	int PlayerCard[13] = { 0 };
	int ComputerCard[13] = { 0 };
	initial(board, ROW, COL, PlayerCard, ComputerCard);
	show(board, ROW, COL);
	printf("玩家筹码:%d\n", chip);
	Computer(board, ROW, COL, ComputerCard);
	Player(board, ROW, COL, PlayerCard);
	Round(board, ROW, COL, PlayerCard, ComputerCard, &chip);
	printf("玩家筹码:%d\n", chip);
}

void playgame()
{
	int input = 0;
	do
	{
		if (chip <= 0)
		{
			printf("没有足够的筹码进行下一轮游戏,游戏结束!\n");
			break;
		}
		welcome();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("开始游戏\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
}

int main()
{
	playgame();
	return 0;
}

//game.h

#pragma once
#define ROW 4
#define COL 13
#define CHIP 1000
#include<stdio.h>
#include<time.h>
#include<Windows.h>

void initial(int board[ROW][COL], int row, int col, int PlayerCard[],int ComputerCard[]);
void show(int board[ROW][COL], int row, int col);
void Computer(int board[ROW][COL], int row, int col,int ComputerCard[]);
void Player(int board[ROW][COL], int row, int col, int PlayerCard[]);
void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[],int* chip);

//game.c

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"

void initial(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[])
{
	int i = 0;
	int j = 0;
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < col;j++)
		{
			if (j < 9)
				board[i][j] = j + 1;
			else
				board[i][j] = 10;
		}
	}
	for (i = 0;i < 13;i++)
	{
		PlayerCard[i] = 0;
		ComputerCard[i] = 0;
	}
}

void show(int board[ROW][COL], int row, int col)
{
	int i = 0;
	int j = 0;
	printf("牌池:\n");
	for (i = 0;i < row;i++)
	{
		for (j = 0;j < col;j++)
		{
			printf("%d ", board[i][j]);
		}
		printf("\n");
	}
}

int give(int board[ROW][COL], int row, int col)
{
	int card = 0;
	while (1)
	{
		int i = rand() % row;
		int j = rand() % col;
		if (board[i][j] != 0)
		{
			card = board[i][j];
			board[i][j] = 0;
			break;
		}
	}
	return card;
}

void Computer(int board[ROW][COL], int row, int col,int ComputerCard[])
{
	int i = 0;
	int flag = 0;
	ComputerCard[0] = give(board, ROW, COL);
	ComputerCard[1] = give(board, ROW, COL);
	Sleep(300);
	printf("电脑手牌:[?] %d\n", ComputerCard[1]);
}

void Player(int board[ROW][COL], int row, int col,int PlayerCard[])
{
	int i = 0;
	int flag = 0;
	PlayerCard[0] = give(board, ROW, COL);
	PlayerCard[1] = give(board, ROW, COL);
	Sleep(300);
	printf("玩家手牌:%d %d\n", PlayerCard[0], PlayerCard[1]);
}

int test(int Card[],int time)
{
	int i = 0;
	int sum = 0;
	for (i = 0;i < time;i++)
	{
		sum += Card[i];
		Sleep(300);
		printf("%d ", Card[i]);
	}
	printf("\n");
	return sum;
}

void C_Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[], int time_P, int sum_P, int* chips)
{
	int i = 0;
	int time_C = 2;
	int sum_C = ComputerCard[0] + ComputerCard[1];
	while (sum_C < sum_P && sum_C < 21)
	{
		ComputerCard[time_C] = give(board, ROW, COL);
		time_C++;
		Sleep(500);
		printf("电脑手牌:");
		sum_C = test(ComputerCard, time_C);
	}
	if (sum_C > 21)
	{
		printf("电脑点数为%d,超过21点,玩家获胜!\n", sum_C);
		*chips += 90;
	}
	else if (sum_C >= sum_P)
	{
		printf("电脑点数为%d,玩家点数为%d,电脑获胜!\n", sum_C, sum_P);
		*chips -= 100;
	}
}
		

void Round(int board[ROW][COL], int row, int col, int PlayerCard[], int ComputerCard[],int *chip)
{
	int input = 0;
	int time_P = 2;
	int sum_P = PlayerCard[0] + PlayerCard[1];
	int i = 0;
	int chips = *chip;
	printf("玩家回合开始\n");
	do 
	{
		printf("玩家是否继续要牌?1.是 0.否>>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			sum_P = 0;
			PlayerCard[time_P] = give(board, ROW, COL);
			time_P++;
			printf("玩家手牌:");
			sum_P = test(PlayerCard,time_P);
			if (sum_P > 21)
			{
				printf("玩家点数为%d,超过21点,电脑获胜!\n", sum_P);
				*chip -= 100;
				input = 0;
			}
			if (sum_P == 21)
			{
				printf("玩家点数为21点,玩家获胜!\n");
				*chip += 90;
				input = 0;
			}
			break;
		case 0:
			printf("玩家回合结束,电脑回合开始\n");
			Sleep(300);
			printf("玩家手牌:");
			for (i = 0;i < time_P;i++)
			{
				printf("%d ", PlayerCard[i]);
			}
			printf("\n");
			Sleep(300);
			printf("电脑手牌:%d %d\n", ComputerCard[0], ComputerCard[1]);
			C_Round(board, ROW, COL, PlayerCard, ComputerCard, time_P, sum_P, &chips);
			*chip = chips;
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);	
}

更多推荐

C语言学习 / 简易21点