IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 基于链表的模拟21点游戏 C语言 -> 正文阅读

[C++知识库]基于链表的模拟21点游戏 C语言

题目

在这里插入图片描述

效果

在这里插入图片描述

代码

game.c:是游戏的逻辑

#include <stdlib.h> // for drand48
#include <stdio.h>
#include <string.h>
#include "card.h"
#define SHUFFLE_TIMES 7
const char suits[4]={'C','D','H','S'};
/* This main() is constructed just for testing purposes. See
 * play_game() below for actually connecting together the pieces */
// organize all the helper functions to play a complete game
cardT *creat_a(void){
    cardT *ret=NULL,*tmp;
    for(int i=0;i<4;i++){
        for(int j=1;j<=13;j++){
           tmp=makeCard(j, suits[i]);
           tmp->next=ret;
           ret=tmp;
        }
    }
    return ret;
}
void show_all(cardT* head){
    for(; head;head=head->next)
    {
        printf("%d%c ",head->rank,head->suit);
    }
}
int abss(cardT* x){
    if(x->rank<=10)return x->rank;
    else return 10;
}
void show(cardT* human_head,cardT*computer_head,int human_sum, int computer_sum){
    printf("human: ");
    show_all(human_head);
    printf("human sum=%d\ncomputer: ",human_sum);
    show_all(computer_head);
    printf("computer sum=%d\n",computer_sum);
}
void play_game(void) {
    cardT *deck=creat_a();
    for(int i=0;i<SHUFFLE_TIMES;i++){
        deck=shuffle(deck);
    }
    int human_sum=0,computer_sum=0;
    cardT * human_head,*human_now,*computer_head,*computer_now;

    human_head=deck;
    deck=deck->next->next;
    human_now=human_head->next;
    human_now->next=NULL;
    human_sum+=abss(human_head);
    human_sum+=abss(human_head->next);

    computer_head=deck;
    deck=deck->next;
    computer_now=computer_head;
    computer_now->next=NULL;
    computer_sum+=computer_head->rank;
    char input[16],fl=1;
    while(1){
        show(human_head,computer_head,human_sum,computer_sum);
        printf("human player,stand or hit?");
        scanf("%s",input);
        if(strcmp(input,"stand")==0 || strcmp(input,"s")==0 || strcmp(input,"S")==0){
            break;
        }else if(strcmp(input,"hit")==0 || strcmp(input,"h")==0 || strcmp(input,"H")==0){
            human_now->next=deck;
            deck=deck->next;
            human_now=human_now->next;
            human_now->next=NULL;
            human_sum+=abss(human_now);
            if(human_sum>21){
                fl=0;//human loss
                break;
            }
        }
    }
    while(fl==1 && computer_sum<=17){
        computer_now->next=deck;
        deck=deck->next;
        computer_now=computer_now->next;
        computer_now->next=NULL;
        computer_sum+=abss(computer_now);
    }
    show(human_head,computer_head,human_sum,computer_sum);
    if(fl==0){
        printf("Lost!");
    }else{
        if(computer_sum>21){
            printf("Win!");
        }else if(computer_sum>=human_sum){
            printf("Lost!");
        }else{
            printf("Win!");
        }
    }
    return;
}
int main(int argc, char *argv[]) {
    if(argc>1) {
        srand48(atol(argv[1]));
    }
    play_game();
    return 0;
 }

card.h 结构体card表示一张牌,

// note, the typedef name is "cardT", the struct name is "struct card"
typedef struct card {
    int rank;
    char suit;
    struct card *next; // Be sure you understand what data type "next" is
} cardT;

cardT *makeCard(int rank, char suit); // will need to allocate space!
cardT *shuffle(cardT *pile); // provided for you
int countPile(cardT *pile);  // provided for you
// Include the other required prototypes below

card.c:新建牌组,洗牌功能。

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

/* counts the number of cards in the list headed by "deck" */
int countPile(cardT *pile) {
    int num=0;
    while(pile!=NULL){
        num++;
        pile=pile->next;
    }
    return num;
}

/* just shows the top card right now */
void showPile(cardT *pile) {
    printf("%d%c\n",pile->rank,pile->suit);
}

/* Emulates a "riffle shuffle" of "deck". */
cardT *shuffle(cardT *deck) {
    int count = countPile(deck);
    cardT *cut=deck;
    int i=0;
    while(i<count/2){
        cut=cut->next;
        i++;
    }
    /* cut is now the card 1/2 way through the deck */
    cardT *riffle=cut->next;
    cut->next = NULL;
    cardT *retdeck=NULL;
    while(deck || riffle) { /* just like a while loop */
        cardT *temp;
        if(deck && (!riffle || drand48()<0.5)) {
            /* next card comes from the top of 'deck' */
            temp=deck;
            deck=deck->next;
        } else if(riffle) {
            /* next card comes from the top of 'riffle' */
            temp=riffle;
            riffle=riffle->next;
        }
        /* put the card at the top of the "retdeck" */
        temp->next=retdeck;
        retdeck=temp;
    }
    return retdeck;
}
cardT *makeCard(int rank, char suit){
    cardT *ret =malloc(sizeof(struct card));
    ret->next=NULL;
    ret->rank=rank;
    ret->suit=suit;
    return ret;
}

makefile文件:用于编译游戏,test是用是链接到老师给定的.o文件。

CC=gcc
CARD:=cardAR.o
all:game

game:game.o card.o
	$(CC) -o game game.o card.o
test:game.o
	$(CC) -o test game.o $(CARD)
game.o:game.c
	$(CC) -c game.c
card.o:card.c
	$(CC) -c card.c
clean:
	rm -f main.o game.o card.o

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:17:43  更:2021-12-24 18:18:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:53:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码