C语言21点纸牌游戏系统详细设计说明
- 格式:doc
- 大小:61.57 KB
- 文档页数:14
C语言21点游戏#include#include#include#include#includeint Bookies_score=1000,/*庄家金币*/Rlayer_score=1000;//玩家金币int Bookiesscore=0,/*庄家当前点数*/Rlayerscore=0;//玩家当前点数int Random,/*玩家随机数*/Randoms;//庄家随机数int Bets_P;//玩家下注int Card;//是否发牌int i=1;int s=1;int main(void){Star_interface();//开始界面getch();system("CLS");//---------------------------------以下为产生玩家随机数发牌代码Judge_WorL();//输或者赢函数}//------------以下开始界面int Star_interface(){int i;system("color 9B");printf("\t\t\t C语言游戏:二十一点\n");printf("\n\n\n\n\n\n\n");printf(" 〓〓〓〓〓〓〓〓");printf("\n 〓\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n 〓\n 〓\n");printf(" 〓〓〓〓〓〓〓〓\n");printf("\n\n");printf("\t\t\t ①:查看规则②:开始游戏\n\n");printf("\t\t\t 制作人:小二\n\n");printf("\t\t\t 版本号:1.0\n\t\t\t");scanf("%d",&i);switch(i){case 1:system("CLS");printf("\t\t\t 二十一点游戏规则\n\n\n\t 介绍:手中所有的牌点数之和不超过21点,谁更接近21点,就赢得游戏。
目录备注: (2)一、游戏简介 (2)二、设计要求 (2)2.1 问题描述 (2)2.2 要求分析 (2)三、程序功能 (3)3.1 程序的主要功能描述 (3)3.2序流程图 (3)3.3主界面 (4)3.4功能测试 (4)四、源程序 (6)五、课设心得 (14)备注:由于这次课设开始时以为可以做其他题目,知道周四才知道不行。
但我的21点一几个基本成型,因此没有继续改动,希望老师能够理解。
一、游戏简介又名黑杰克,起源于法国,现已流传到世界各地。
现在在世界各地的赌场中都可以看到二十一点,随着互联网的发展,二十一点开始走向网络时代,比如菲律宾的博彩公司就有该游戏。
该游戏由 2 到 6 个人玩,使用除大小王之外的52 张牌,游戏者的目标是使手中的牌的点数之和不超过 21 点且尽量大。
有着悠久的历史。
1700年左右法国赌场就有这种21点的纸牌游戏。
1931年,当美国内华达州宣布赌博为合法活动时,21点游戏第一次公开出现在内华达州的赌场俱乐部,15年内,它取代掷骰子游戏,而一举成为非常流行的赌场庄家参与的赌博游戏。
二、设计要求编写程序实现游戏,该程序是模拟古老的“21点纸牌游戏”,实现一对一的人机大战。
要求游戏过程中任意一方牌的点数之和超过 21 点,则自动出局;在不超过 21 点的情况下,玩家下注由电脑随机发牌与庄家比累积牌的点数的大小,大者为赢家。
2.1 问题描述本次C++课程设计题目是“21点纸牌游戏”,系统的主要功能是娱乐游戏,有电脑和玩家一起玩这个游戏,玩家设法使自己的牌达到总分21并要比电脑开的点数大而且不超过这个数值。
扑克牌的分值取它们的面值。
J,Q,K分别是11, 12和13分。
2.2 要求分析编写程序实现游戏,该程序是模拟古老的“21点纸牌游戏”,实现1对1的人机大战。
要求游戏过程中任意一方牌的点数之和超过21点,则自动出局;在不超过21点的情况下,玩家下注由电脑随机发牌与庄家比累积牌的点数的大小,大者为赢家。
《C语言课程设计》题目:程序设计基础课程设计班级:姓名:指导教师:所属系部:电子科学与技术系2009年 6 月24 日21点游戏设计1 游戏规则此游戏,原则上是可以由不限定的人数来玩,但是随着参与人数的增加,在最后成绩的比较方面会比较的繁琐,不像两个人之间的比赛结果那么明显,所以也应该将参与人数控制在一定的范围之内。
确定参与人数后,系统会随机为每个人发三张牌,然后计算这三张牌的和进行比较。
如果这三张牌的和大于21,则此人将会输掉比赛,除非其他人的和也大于21(即假若每个人的三张牌的和都大于21时,该局为平局,打成平手)。
如果有的和大于21,有的和小于21,则大于21的人输掉比赛,再比较小于21的部分,谁的三张牌的和最接近21,则谁是该局的赢家。
一局玩完后,玩者可以根据自己情况进行选择是否要再玩一局。
若选择再玩时,系统会再进行下一次的循环。
2 程序算法○1由系统随机产生几组随机数,每组3个随机数。
○2计算每一组的三个随机数的和。
○3比较每组和的大小。
○4得出比赛结果3 关键算法流程图总体框架4 程序代码/* Note:Your choice is C IDE */#include <stdlib.h>#include <stdio.h>#include <time.h>#define N 5main( ){int i,t,flag, j,m;int b[8],a[3*N];char c;b[1]=0;flag=1;while (flag) //控制循环{srand(time(NULL)); /scanf("%d",&j); //用j控制组数for(t=0;t<3*j;t++) //产生几组随机数{if (t%3==0)printf("\n");a[t]=rand()%13+1;printf("%5d",a[t]);}printf("\n");for(i=1;i<=j;i++) //求每组随机数的和{for(t=3*(i-1);t<3*i;t++)b[i]=b[i]+a[t];printf("b[%d]=%d\n",i,b[i]);b[i+1]=0;}printf("\n");{for(t=1;t<j;t++) //对和的大小进行排序for(i=1;i<=j-t;i++)if(b[i]>b[i+1]){m=b[i+1];b[i+1]=b[i];b[i]=m;}for (i=1;i<=j;i++)printf("%5d",b[i]);}printf("\n");for (i=1;i<=j;i++) //得出结论if(b[i]>21){printf("这一局为第%d个人赢\n是否再玩一局,若输入'Y'则继续游戏,输入'N'结束游戏\n",i-1);getchar(); //与while语句是一个系统c=getchar();if(c=='Y')flag=1;elseflag=0;}}}5在程序设计中,出现的问题和解决方案:由于是多组数据之间的比较,首先在同时产生几组随机数时遇到障碍,产生随机数的代码是从网上搜索得到的,再加上一些修改,达到所需的要求,同时有一些小的细节是在老师帮助下完成的。
21点游戏程序设计说明一、功能:一个21点小游戏,游戏开始时,如下第一张截图显示,然后按下开始,再按下发牌,就会庄贤两家各发两张牌,庄家有一张牌是盖着的,接下来贤家根据自己的点数决定要不要据需要牌。
如果点数大于21点则这一句就输了,扣25块的金额,如果按不要,且没大于21点,则庄家盖着的牌翻过了,然后庄贤两家的点数进行比较,谁的点数最接近21点则谁赢这一局。
二、主要实现方法:定义发牌函数:fapai()来产生一张牌,通过然后将牌所对应的图片通过pictureBox.ImageLocation =..............放入pictureBox中。
添加两个timer空间,timer1来控制发牌时庄贤两家各发的两种牌。
Timer2 控制当贤家点击不要之后庄家是否继续要牌,所以根据人的思维,在timer2中,只有当庄家的点数小于16点时才继续要牌,否则则不要了,与贤家进行比较,定义了两个函数showwin()和showloss()分别来显示输了个赢了一局。
然后还有check()和comper()两个函数,check()来检查发牌和要牌过程中庄家和贤家的点数是否大于了21点。
Comper()函数则用来最后庄贤两家的分数进行比较时看谁的分数更接近21点。
还添加了一个规则窗体来显示游戏规则。
运行截图:程序源代码:using System;using System.Collections.Generic; using ponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;namespace _1点游戏vs2005版{public partial class Form1 : Form{public Form1(){InitializeComponent();label4.Text = moneyNew.ToString();}private void Form1_Load(object sender, EventArgs e){button1.Hide();button2.Hide();button3.Hide();button4.Show();}Random ra = new Random();string str;int count1 = 0;int timer1count = 0;int timer2count = 0;int num;int score_Zhuang = 0;int score_Xian = 0;string jpg = ".jpg";string dizhi = "image\\";int money = 100;int moneyNew = 100; //通过改money和moneyNew可改初始的钱数;string pcdi;规则f1 = new规则();public void fapai(){pai = ra.Next(1, 5);if (pai == 1){num = ra.Next(1, 14);str = "m" + num.ToString();if (num == 1)num = 11;if (num == 11){str = "mj";num = 10;}if (num == 12){str = "mq";num = 10;}if (num == 13){str = "mk";num = 10;}}if (pai == 2){num = ra.Next(1, 14);str = "f" + num.ToString();if (num == 1)num = 11;if (num == 11){str = "fj";num = 10;}if (num == 12){str = "fq";num = 10;}if (num == 13){str = "fk";num = 10;}if (pai == 3){num = ra.Next(1, 14);str = "h" + num.ToString();if (num == 1)num = 11;if (num == 11){str = "hj";num = 10;}if (num == 12){str = "hq";num = 10;}if (num == 13){str = "hk";num = 10;}}if (pai == 4){num = ra.Next(1, 14);str = "r" + num.ToString();if (num == 1)num = 11;if (num == 11){str = "rj";num = 10;}if (num == 12){str = "rq";num = 10;}if (num == 13){str = "rk";num = 10;}}}public void restart() //重新开始{score_Zhuang = 0;score_Xian = 0;label1.Text = "0";count1 = 0;timer2count = 0;button1.Hide();button2.Hide();button3.Hide();label4.Text = money.ToString();if (money <= 0){MessageBox.Show("Game Over! You Loss!");newGamer();button3.Hide();money = moneyNew;label4.Text = money.ToString();}if (money >= 2 * moneyNew){MessageBox.Show("Congratulations! You Win!");newGamer();button3.Hide();money = moneyNew;label4.Text = money.ToString();}label6.Text = "0";button4.Show();}void showwin(){MessageBox.Show("你赢了25元!\n继续吗?", "你赢了这盘!", MessageBoxButtons.YesNo);money += 25;restart();}void showloss(){MessageBox.Show("你输了25元!\n继续吗?", "你输了这盘!", MessageBoxButtons.YesNo);money -= 25;restart();}void check(int i, int j){if (i > 21){showwin();}if (j > 21){showloss();}}void comper(int i, int j){if (i > j){showloss();}else if (i < j){showwin();}else{MessageBox.Show("平局");restart();}}private void timer1_Tick_1(object sender, EventArgs e) //控制刚开始发牌时发的四张牌。
设计题目: 21点游戏二十一点游戏是一款操作简单,老少皆宜,并且带有很强娱乐性的游戏。
二十一点游戏也是我们学习C语言过程中用来锻炼我们编程能力的一种简单有效的方式。
编写二十一点游戏的目的就是在编写过程中学习和掌握各种编程的能力,二十一点游戏中有我们经常接触到的一些头文件,和小的函数体,以及一些相关知识,能让我们在实践中得到锻炼。
一、设计目的与要求1、程序设计的源程序功能如下:(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。
(2)程序中一共有13张扑克牌可以随机抽取,大于10的点数为10,现要求大于10的点数全部为半点。
(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。
(4)高级玩家可以查看下一张牌,即按h键,然后按要求输入密码,密码正确可以看牌,并决定是否要牌。
(5)每次要牌后可以设定赔率,即如果开始下的是10元钱的注,如果牌好,你可以要求再下注,当然不能超过你所有的总钱数。
(6)将界面的提示说明改成中文界面,界面的解释详细友好,可以吸引更多的玩家。
二、课程设计(1)题目要求把源程序封装在类中,需要编写一个类来封装所有相关函数和变量,同时对main主函数进行改写,以完成题目的要求。
(2)题目要求把抽到的大于10点的牌的点数设为半点,只需要设计随机取下一张牌的成员函数时用if语句判定牌的点数是否大于10,大于10的牌对其重新赋值为即可。
(3)题目要求超级玩家在输入密码后可以查看下一张牌,只需设计一成员函数,判定玩家是否继续要牌之前加入对玩家是否输入h键的判定,如果有输入,则调用为处理玩家输入密码而单独编写的成员函数,在该函数中,首先判定玩家的密码输入是否正确,不正确则返回0,正确则返回1。
(4)题目要求玩家可以根据手上的牌决定是否下注,只需设计一成员函数,检查玩家的赌注累计不超过他所拥有的总资本。
三、设计描述1、为满足上述第一条要求,在程序中增加了一个类play,封装到类中的函数有:void replay();四、调试分析1、游戏开始2、游戏过程3、游戏结果五、总结主函数的设计显得有些繁冗杂乱,有很多的程序段有简化的空间。
沈阳理工大学课程设计专用纸No i目录1 题目内容及设计要求 (2)2 总体设计 (2)2.1 总体功能框图 (2)2.2 类的设计说明 (3)2.3 主要算法流程图 (4)3 程序清单及注释 (5)4 运行结果与分析 (5)5 总结 (25)6 参考文献 (25)2.2 类的设计说明定义一个Game类实现游戏的基本功能,可以抽牌,计算牌点,返回牌数,设置赌注,拥有的金额,计算赢局,输局,平局等。
如Game(); //构造函数。
Void FirstPlayTwo();//最初两张牌。
int GetNumber();//返回牌张数。
float GetPip(); //返回点数。
void DisplayPip();//一次全部显示牌面点数。
void DisplayPip(int ); //除了除了前两张牌,一次全部显示牌面点数(针对计算机牌的显示)。
void TurnPlay();//产生随机数,随机出一张牌。
void Win();//赢了计算赌注。
void Lose();//输了。
void Draw();//平局。
int setGamble(int);//设置赌注,赌本不够返回1。
int getMoney();//返回钱数。
void DisplayInfo();//打印必要的信息。
int GetCurrentCard();//返回当前牌点。
int Gamble();//返回赌注。
等等。
定义一个Display类可以打印进入游戏的界面,可以实现用户注册,登录,查看规则,升级用户储存用户资料等功能。
Display();//构造函数。
void cls();//清屏。
char Playername();//返回用户名。
char Password(int);//返回密码。
int nMoney();//返回现金。
void DisplayRegister();//打印注册界面。
void DisplayBegin();//打印登录界面。
《C/C++语言课程设计》指导书一、课程设计概要课题名称:21点双人对战和人机对战二、课题背景概述21点扑克是牌类游戏中的比较基础游戏,其基本打法为双人共玩一副洗好的52张牌(大小王拿走),采用回合制比每回合输赢,直至打完一副牌算总积分决出胜负。
每回合双方轮流拿牌,每人牌数2-5张,每回合拿牌结束时统计两人手上牌的总点数,并裁决本回合输赢。
如果轮到一方拿牌而放弃,则本回合此人不能再拿牌;如果手上牌的点数超过21点,则算爆。
如果双方都没爆,则点数较高者获胜;如果一方爆另一方没爆,则没爆者获胜;如果双方都爆,则爆的少的人(点数超过21点较少者)获胜。
牌点计算方式:牌面10、J、Q、K均算10点;牌面2-9的点数同数字;花牌A既可以当1点用,也可以当11点用,具体当什么用,由持有花牌者按有利于自己的策略决定,但是计算机裁决程序总是会按最有利于持花牌者的算法自动进行点数计算。
三、课程设计目标1、课题实现的功能目标渐进开发实现21点双人对战和人机对战,并最终实现其类封装和面向对象程序设计。
2、知识应用能力的培养目标通过项目开发、调试、完善的过程,渐进地理解、正误、巩固和掌握基本数据类型的使用和转换、顺序-分支-循环的组合应用、变量声明和引用、函数的定义/声明/调用、数组和指针使用、结构体和类的使用等语法知识,熟练掌握常用测试和调试技术手段,达到理论联系实践、融会贯通的目的。
3、数学建模能力的培养目标随机数产生无重复无遗漏牌张、随机插牌、A牌的用法、计算胜率(在最后的人机对战要用)都涉及一定数学建模和算法设计应用能力,因此在无形中也锻炼了这种能力。
4、软件工程方法论培养目标从项目开发过程体会、理解和自觉应用程序设计和测试的思路及方法。
理解和应用ADT概念和面向对象程序设计思想的由顶向下设计方法,从顶层抽象设计开始,通过过程抽象和数据抽象,逐层分解、渐进推进程序设计实现和测试改进,理顺程序设计和测试完善的思路。
1.1 问题描述本次C++课程设计题目是“21点纸牌游戏”,系统的主要功能是娱乐游戏,有电脑和玩家一起玩这个游戏,玩家设法使自己的牌达到总分21并要比电脑开的点数大而且不超过这个数值。
扑克牌的分值取它们的面值。
J,Q,K 分别是5,6和6分。
1.2 要求分析编写程序实现游戏,该程序是模拟古老的21点扑克牌游戏,实现1对1的人机大战。
要求游戏过程中任意一方牌的点数之和超过21点,则自动出局;在不超过21点的情况下,玩家下注由电脑随机发牌与庄家比累积牌的点数的大小,大者为赢家。
2 总体设计2.1 总体功能框图2.2主要算法流程图3. 详细设计程序流程图。
图2-1 算法流程图3程序清单及注释// 21点游戏.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include<iostream>#include<math.h>#include<time.h>using namespace std;int x=1;int mima;int rand(int n ); //声明bool win();bool win1();bool win2();//定义变量win为逻辑型变量void money(); //运行赌注int main(){cout<<"\t※※※※※※※※※※欢迎进入21点※※※※※※※※※※\n\n";cout<<"\t\t 游戏规则:\n";cout<<endl;cout<<"\t\t 1.玩家最多可下赌注1~100;\n";cout<<endl;cout<<"\t\t 2.如果牌点数的总数超过21点则暴点,自动判数;\n";cout<<endl;cout<<"\t\t 3.计算机方在大于等于16点时不再要牌。