面向对象纸牌游戏实验报告

合集下载

java课程设计 蜘蛛纸牌游戏设计课程设计报告

java课程设计 蜘蛛纸牌游戏设计课程设计报告

《面向对象程序设计》课程设计报告题目: 下拉列表运算器设计专业: xxxxx班级: xxx姓名: xx指导教师: xx成绩:xxxxxx 年 x 月xx 日xx目录1设计内容及要求 (2)1.1 设计内容 (2)1.2 设计要求 (2)2概要设计 (2)2.1代码功能功能模块设计: (2)2.2程序的总体设计流程图: (3)2.3模块一的详细介绍: (3)2.3.1主要的类: (3)2.3.2主要的变量: (4)2.3.3主要的方法: (4)2.4模块二的详细介绍: (5)2.4.1主要的类: (5)2.4.2主要的变量: (5)2.4.3主要的方法: (5)2.5模块三的详细介绍: (6)2.5.1主要类介绍: (6)2.5.2主要变量: (6)2.5.3主要方法: (7)2.6模块四的详细介绍: (7)2.6.1主要的类: (8)2.6.2主要的变量: (8)2.6.3主要的方法: (8)3设计过程或程序代码 (9)3.1需要实现的主要功能: (9)3.2功能设计流程图: (10)3.3主要功能的代码实现: (10)3.3.1游戏菜单栏内游戏菜单及帮助菜单功能展示: (10)3.3.2主界面的设计: (11)3.3.3纸牌的初始化以及发牌操作 (13)3.3.4纸牌的移动以及放置 (18)3.3.5显示当前纸牌可行的操作: (19)3.3.6回收纸牌: (21)4设计结果与分析 (22)4.1运行程序: (22)4.2发布程序: (23)4.3总结: (24)5参考文献 (24)1设计内容及要求1.1 设计内容相信很多人都玩过蜘蛛纸牌这款休闲游戏,现在随着生活水平的提高,人们拥有充分的时间来享受休闲游戏带来的快乐,越来越多的人亲睐蜘蛛纸牌游戏。

谈起这款游戏,大家并不陌生。

从WINDOWS2000系统开始,就嵌入了蜘蛛纸牌游戏,可是随着微软系统的不段升级,蜘蛛纸牌游戏的功能业变得越来越强大,游戏的界面也更加美观。

纸牌游戏实验报告doc

纸牌游戏实验报告doc

纸牌游戏实验报告doc
一、实验目的
本次实验的目的是培养学生对智能程序设计的基础知识,系统学习程序设计语言,并运用程序设计语言实现纸牌游戏的实现。

二、实验环境
本次纸牌游戏实验在Windows操作系统相关环境下使用VisualC#进行开发。

三、实验内容
(一)游戏规则
纸牌游戏是一种简单的游戏,其规则比较容易理解和记忆:首先,将所有的纸牌洗牌混乱,然后随机发牌给两个玩家,给每个玩家发5张牌,每个玩家只能看自己发的纸牌,其他没有看到,然后玩家们根据每张牌的花色和点数进行比大小,谁的牌大谁就赢。

(二)程序设计
本次实验主要实现了纸牌游戏的功能,包括:洗牌,发牌,输入牌,比牌,及比赛结果的输出等功能。

洗牌:此功能用于洗牌,算法思想是遍历整个牌组,从中随机选择一张牌,将其移至数组末端,再次随机选择,直到所有的牌组都完成洗牌。

发牌:此功能用于抽取纸牌,算法思想是从洗牌后的牌组中随机抽取5张牌发给玩家,最后将玩家手中的牌组保存到数据结构中,完成发牌功能。

蜘蛛纸牌游戏

蜘蛛纸牌游戏

《面向对象程序设计》课程设计报告题目:蜘蛛纸牌游戏软件设计与实现院(系):信息科学与工程学院专业班级:计算机科学与技术1201班学生姓名:程伟学号: 20121183011指导教师:吴奕20 14 年 12 月 29 日至20 15 年 1 月 9 日华中科技大学武昌分校制面向对象程序设计课程设计任务书目录1需求与总体设计 (1)1.1 需求分析 (1)1.2 功能图 (1)1.3 类图 (2)2详细设计 (3)2.1程序流程图 (3)2.2功能设计 (3)2.2.1 SpiderMenuBar.java类 (3)2.2.2 PKCard.java类 (4)2.2.3 AboutDialog.java类 (5)2.2.4 Spider.java类 (6)3编码实现 (7)4系统测试 (36)总结 (40)1需求与总体设计1.1需求分析编写程序以实现游戏蜘蛛纸牌的功能。

1、设计游戏界面。

2、纸牌以及其背景的设定。

3、移动纸牌。

4、回收纸牌。

5、发牌。

6、若玩家不了解游戏规则可以点击帮助获得游戏方法。

7、级别设定。

8、退出游戏。

主要由四个部分组成,分别是Spider.java(生成蜘蛛纸牌游戏的框架,实现游戏中的方法,包括纸牌的随机生成、位置摆放等)、SpiderMenuBar.java(生成蜘蛛纸牌游戏的菜单栏)、PKCard.java(定义纸牌的属性)、AboutDialog.java(生成游戏的帮助栏)。

1.2 功能图1.3 类图2详细设计2.1程序流程图2.2功能设计2.2.1 SpiderMenuBar.javaSpiderMenuBar.java包含名为SpiderMenuBar的public类,其主要功能是生成游戏的菜单栏,实现菜单栏中各个组件的事件侦听。

主要包括3个模块:图形用户界面的构建;组件监听接口的实现;显示可执行操作的线程。

2.2.2 PKCard.javaPKCard.java包含名为PKCard的public类,其主要功能是定义纸牌的属性,包括名称、位置等相关信息。

2014面向对象技术实验指导

2014面向对象技术实验指导

面向对象技术实验指导实验一:solitaire纸牌游戏单人纸牌游戏,牌桌上有7个堆共28张牌,第一堆1张牌,第二堆2张,。

第7堆7张,每一堆的第一张牌朝上,其他朝下。

牌桌上还有4个suitpiles,一个deck card堆和一个discard card堆,布局如下(参考windows的纸牌游戏)设计一个简单的CardGames程序,运用面向对象封装、继承、抽象类、抽象方法、多态、动态绑定等概念。

实验二:排序设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。

要求:1.可以对任何简单类型和任意对象进行排序2.可以支持升序、降序、字典排序等多种顺序要求3.可以随意增加排序算法和顺序要求,保证其他程序不修改4.减少程序代码中逻辑上的冗余5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点6.提交设计报告,包括:使用UML设计的类图;主要程序代码说明;方案优缺点比较。

实验三:播放器模拟实现一个多功能电子设备,它既能播放mp3歌曲,同时还能够借助播放器的界面来监测脉动。

1.这个设备有一个屏幕,屏幕上可以显示两种界面:界面1是显示视图,有一个进度条,可以显示当前所播放音乐的节拍或是脉动,以节拍为例,比如是100 BPM 还是 120BPM(BPM是节拍的度量单位)。

还有一个文本,显示“Current BPM: xxx”.界面2是控制视图,上面的控件有:1)有一个菜单条,上面有一个菜单,菜单里有“start”、“stop”和“quit”命令。

2)有一个输入框,旁边的文本为"Enter BPM:",可以在输入框内容输入特定的节拍。

3)有一个“set”按钮,可以改变每分钟的节拍数。

4)还有两个微调箭头按钮“<<”和“>>”,使用这两个按钮可以微调节拍的值。

注意,选择“start”开始产生节拍,选择“stop”停止产生节拍。

在选择开始产生节拍时,stop都应该是无效的,但是节拍产生后,start应该是无效的。

纸牌游戏研究报告

纸牌游戏研究报告

纸牌游戏研究报告简介纸牌游戏是一种广泛流行的娱乐活动,可以单独进行或与其他玩家一起。

在这篇报告中,我们将对纸牌游戏进行深入的研究,包括游戏规则、历史、策略和心理学等方面的内容。

游戏规则纸牌游戏有许多不同的规则和玩法,每种游戏都有其特定的目标和规则。

以下是一些常见的纸牌游戏及其规则:1. 扑克牌扑克牌是最常见的纸牌游戏之一,它有多种变体,例如德州扑克、黑杰克等。

扑克牌有52张,玩家根据手中的牌面和规则进行下注和比较牌面大小。

2. 纸牌接龙纸牌接龙是一种单人游戏,玩家需要将所有的纸牌依照花色和点数依次排列好。

这个游戏需要一定的智力和策略,而且可以提高玩家的记忆能力和注意力。

3. 麻将麻将是一种流行的亚洲纸牌游戏,它通常是多人游戏。

玩家需要根据手中的牌面和规则组成特定的牌型,例如顺子、刻子等。

麻将需要一定的技巧和计算能力。

历史纸牌游戏的历史可以追溯到数百年前,它起源于中国和印度,并在西方国家逐渐流传开来。

最早的纸牌游戏可以追溯到9世纪的中国唐朝,这些纸牌被称为“图”,它们是由纸和绢制成的。

在13世纪,纸牌游戏传播到了埃及和欧洲。

随着时间的推移,纸牌游戏在欧洲国家变得越来越流行,并出现了各种不同的规则和玩法。

到了18世纪,纸牌游戏在法国变得非常流行,成为贵族社交活动的一部分。

在这个时期,许多经典的纸牌游戏,如扑克和百家乐,逐渐形成。

随着工业革命的到来,纸牌的生产变得更加容易和廉价,从而使纸牌游戏更加普及。

今天,纸牌游戏已经成为了世界各地人们生活中重要的娱乐方式。

策略纸牌游戏不仅仅是一种运气和机会的游戏,它也需要一定的策略和技巧。

一些常见的纸牌游戏策略包括:1.观察对手:注意观察对手的行为和表情,以推测他们的手牌或意图。

2.记忆牌型:在游戏过程中尽量记住所有已经出现过的牌,并计算剩余牌的概率,以优化自己的决策。

3.调整策略:根据游戏进展和对手的行为,灵活调整自己的策略,以获得最佳的结果。

4.风险控制:在下注和出牌时,要根据自己的牌面和对手的表现合理控制风险,避免过度冒险。

扑克配对实验报告

扑克配对实验报告

扑克配对实验报告扑克配对实验报告引言:扑克牌是一种非常经典的纸牌游戏,它的玩法多样且富有挑战性。

在这个实验中,我们将探索扑克牌的配对规律。

通过系统性的实验和数据分析,我们希望能够揭示扑克牌配对的潜在规则,并对这些规则进行解释。

实验设计:我们选择了一副标准的扑克牌,共计52张,包括四种花色(红桃、方块、梅花、黑桃)和13个不同的面值(A、2、3、4、5、6、7、8、9、10、J、Q、K)。

我们将牌面朝下洗牌,并随机抽取两张牌进行配对。

重复这个过程100次,以获取足够的数据样本。

实验结果:通过实验,我们得到了一系列配对结果的数据。

我们将这些数据进行整理和分析,以寻找其中的规律。

首先,我们观察到同一花色的牌在配对中出现的频率相对较高。

例如,红桃和红桃、黑桃和黑桃的配对出现的次数较多。

这可能是因为人们更容易注意到相同颜色的牌,并更容易将它们配对起来。

其次,我们发现面值相同的牌在配对中出现的次数也相对较高。

例如,两张A、两张2的配对出现的频率较高。

这可能是因为面值相同的牌在视觉上更容易被注意到,并且更容易被人们视为一对。

此外,我们还观察到一些有趣的现象。

例如,一张红桃A和一张黑桃A的配对出现的频率相对较低。

这可能是因为在配对过程中,人们更容易将颜色相同的牌放在一起,并将它们视为一对。

讨论与解释:通过对实验结果的分析,我们可以得出一些关于扑克牌配对规律的解释。

首先,同一花色的牌在配对中出现频率较高可能是因为人们更容易注意到相同颜色的牌。

这与我们的日常经验相符,因为我们在玩牌时常常会将红桃和红桃、黑桃和黑桃等颜色相同的牌放在一起。

其次,面值相同的牌在配对中出现频率较高可能是因为我们在视觉上更容易注意到它们,并将它们视为一对。

这可能与我们的认知习惯有关,我们习惯将相同面值的牌视为一对。

最后,配对中颜色相同但面值不同的牌出现频率较低可能是因为在配对过程中,人们更倾向于将颜色相同且面值相同的牌放在一起。

这可能是我们在玩牌时形成的一种习惯,我们更容易将相同颜色且面值相同的牌视为一对。

面向对象技术实验指导课件

面向对象技术实验指导课件
&& y <= ty && ty <= y + Card.height;
}
public void addCard(Card aCard){
pile.add(aCard);
}
public void draw (Graphics g){
if (empty()) {
g.drawRect(x,y,Card.width,Card.height);
实验二
设计一个负责排序的程序包,实现多种排序算法,至少包括插入排序、冒泡排序和快速排序算法。
要求:
1.可以对任何简单类型和任意对象进行排序
2.可以支持升序、降序、字典排序等多种顺序要求
3.可以随意增加排序算法和顺序要求,保证其他程序不修改
4.减少程序代码中逻辑上的冗余
5.至少用两种方案编程实现该程序包,并说明两个方案的优缺点
tableau = new TablePile[7];
int deckPos = 600;
int suitPos = 15;
allPiles[0] = deckPile = new DeckPile(deckPos, 5);
allPiles[1] = discardPile =
new DiscardPile(deckPos − Card.width − 10, 5);
6.提交设计报告,包括:使用UML设计的类图;主要程序代码说明;方案优缺点比较。
实验三:上述排序过程演示
要求:
1.可以随机自动生成排序数据,也可以录入、修改排序数据
2.演示速度可调整
3.可以单步,可以暂停,可以回退
实验
模拟实现一个多功能电子设备,它能播放各种音频、视频文件。

纸牌游戏设计报告

纸牌游戏设计报告

题目:(纸牌游戏)编号为 1~52张牌,正面向上,从第二张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后从第三张牌开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;直到以52为基数的翻过,输出:这时输出正面向上的牌有哪些?一、问题分析及任务定义1、此程序需要完成如下要求:有已编号的1〜52张牌且正面朝上,从第二张牌开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;直到以52为基数的牌翻过,要求最后输出所有正面向上的牌的编号。

2、任务定义:实现本程序需要解决以下几个问题:①如何存储52张牌,所选择的存储结构要便于实现题给要求的操作。

②如何设计翻牌程序。

③一张牌可能一次未翻,也可能翻多次,在经过所有的翻牌以后,如何知道每一张牌是否为正面向上。

④输出所有正面向上的牌的编号。

本问题的关键在于选择合适的数据结构存储52张牌,难点在于在所选的数据结构下实现题给要求的翻牌操作。

另一个难点在于所有的牌都进行了翻牌操作后,如何知道每一张牌是否为正面向上。

首先我们可以从实际生活中的操作来探讨第二个难点的解决思路。

编号为1的牌没有进行翻牌,即翻牌的次数为0,仍然为正面朝上;编号为 2的牌在整个过程中只翻了一次,为反面朝上;编号为 3的牌在整个过程中只翻了一次,为反面朝上;编号为4的牌在整个过程中翻了两次,为正面朝上;编号为 5的牌在整个过程中翻了一次,为反面朝上;编号为6的牌在整个过程中翻了三次(由于 6是2、3、6的倍数),为反面朝上;以此类推直至编号为52的牌,从上述过程可以总结出这样的规律:从编号为1的第一张牌到编号为 52的最后一张牌,只要它翻过的次数为偶数则是正面朝上,反之则为反面朝上。

因此我们可以依据每张牌翻过的次数来确定它最终是否为正面向上,从而输出实验所需要的结果:所有正面向上的牌的编号。

3、原始数据的输入、输出格式:由于本程序简单明了,不需要有任何的数据输入,只须用户选择执行或不执行此程序,若执行此程序,在程序运行后便可直接在运行结果窗口中看到所有正面朝上的牌的编号,这些编号数据均为整型;若不执行该程序则选择退出。

Java课程设计报告—蜘蛛纸牌

Java课程设计报告—蜘蛛纸牌

面向对象程序设计课程设计报告JA V A程序设计课程设计之蜘蛛纸牌学院:年级:班级:指导老师:小组成员:时间:课程设计题目JAVA课程设计——蜘蛛纸牌学院计算机学院专业网络工程年级2009已知参数和设计要求:蜘蛛纸牌的主要功能模块包括:a、游戏界面的布局以及纸牌的设定;b、能够设定不同等级以实现游戏难易度的不同;c、实现游戏主功能;d、实现帮助功能;e、实现退出功能。

要求以小组为单位,用JAVA实现蜘蛛纸牌的主要功能模块;可以根据自己对蜘蛛纸牌游戏的理解,对实现的内容进行扩展最后需要提供的材料包括课程设计报告1份,程序拷贝1份(包括源代码和可执行程序)。

学生应完成的工作:根据JAVA程序设计的思想和编程技术,设计实现蜘蛛纸牌游戏。

上机调试并能正确运行,并提交完整的设计报告和软件程序拷贝。

目前资料收集情况(含指定参考资料):《Java程序设计》,朱庆生,古平等著,清华大学出版社,2011,1《Java编程》,王伟平等著,清华大学出版社,2010,5《Java课程设计案例精编》黄晓东编著,中国水利水电出版社出版《Java程序设计实用教程》张永常主编,电子工业出版社出版课程设计时间为一周,从15周星期一开始(2011年12月12日),到15周星期五结束(2011年12月16日)。

课程设计以组为单位进行。

每组3~4个人。

星期一进行蜘蛛纸牌游戏的内容和规则设计。

星期二查找资料解决具体的技术问题。

星期三用JAVA语言实现程序。

星期四精星课堂演示程序以及完成课程设计报告。

星期五提交程序和课程设计报告。

本组由组成任务下达日期年月日完成日期年月日指导教师(签名)学生(签名)目录第一章课程设计要求 (1)题目名称 (1)题目类型 (1)课程设计目的 (1)实验原理 (1)实验内容 (1)第二章设计概要 (2)2.1 功能设计 (2)2.2 程序流程 (2)2.3功能分析 (3)1. 主要界面: (3)2初始化纸牌及发牌操作: (4)3纸牌移动放置操作: (7)4.回收纸牌操作: (8)5.帮助菜单功能的实现: (9)6.退出功能的实现: (10)第三章调试分析与测试结果 (11)第四章设计总结 (15)第五章参考文献 (16)第一章课程设计要求题目名称:蜘蛛纸牌游戏题目类型:设计型课程设计目的:学会综合运用已学的JAVA知识,用面向对象的技术实现一个小型的应用程序。

【免费下载】面向对象技术实验指导

【免费下载】面向对象技术实验指导
实验三:上述排序过程演示
要求: 1.可以随机自动生成排序数据,也可以录入、修改排序数据 2. 演示速度可调整 3.可以单步,可以暂停,可以回退
实验四:实现冒泡排序、插入排序两种排序方法: 提示用户输入一组数,并选择排序方法,进行排序 结果显示排序结果、使用的排序方法、排序时间复杂度 增加一种新的排序算法(如堆排序、快速排序等),除了新增加的类,尽可能不已
package solitaire; import javax.swing. ∗ ; import java.awt. ∗ ;
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根通保据过护生管高产线中工敷资艺设料高技试中术卷资,配料不置试仅技卷可术要以是求解指,决机对吊组电顶在气层进设配行备置继进不电行规保空范护载高与中带资负料荷试下卷高问总中题体资,配料而置试且时卷可,调保需控障要试各在验类最;管大对路限设习度备题内进到来行位确调。保整在机使管组其路高在敷中正设资常过料工程试况中卷下,安与要全过加,度强并工看且作护尽下关可都于能可管地以路缩正高小常中故工资障作料高;试中对卷资于连料继接试电管卷保口破护处坏进理范行高围整中,核资或对料者定试对值卷某,弯些审扁异核度常与固高校定中对盒资图位料纸置试,.卷保编工护写况层复进防杂行腐设自跨备动接与处地装理线置,弯高尤曲中其半资要径料避标试免高卷错等调误,试高要方中求案资技,料术编试交写5、卷底重电保。要气护管设设装线备备置敷4高、调动设中电试作技资气高,术料课中并3中试、件资且包卷管中料拒含试路调试绝线验敷试卷动槽方设技作、案技术,管以术来架及避等系免多统不项启必方动要式方高,案中为;资解对料决整试高套卷中启突语动然文过停电程机气中。课高因件中此中资,管料电壁试力薄卷高、电中接气资口设料不备试严进卷等行保问调护题试装,工置合作调理并试利且技用进术管行,线过要敷关求设运电技行力术高保。中护线资装缆料置敷试做设卷到原技准则术确:指灵在导活分。。线对对盒于于处调差,试动当过保不程护同中装电高置压中高回资中路料资交试料叉卷试时技卷,术调应问试采题技用,术金作是属为指隔调发板试电进人机行员一隔,变开需压处要器理在组;事在同前发一掌生线握内槽图部内 纸故,资障强料时电、,回设需路备要须制进同造行时厂外切家部断出电习具源题高高电中中源资资,料料线试试缆卷卷敷试切设验除完报从毕告而,与采要相用进关高行技中检术资查资料和料试检,卷测并主处且要理了保。解护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

面向对象实验报告

面向对象实验报告

面向对象实验报告博客代码可在里面搜索纸牌:总体结构:card包:包含了纸牌类(Card)以及下面七个牌堆(T ableau),上面发牌的两个牌堆(StackOfCards),上面存储已经排好的牌堆(Foundation)。

Suit类则是一个花色的集合。

HoldingCell则指的是选中的正在移动的牌堆dataStructures包:对基本数据结构的封装,添加了一些特有的方法。

Solitaire包:具体游戏规则的实现以及界面的drawCard类的主要方法:基本的初始化:花色,牌值,中心坐标,是否翻开,宽度。

比较的方法:比较花色和数值画出正反面的图片翻转HoldingCell:继承自StackOfCards,初始化用来分配的数组(所有牌值和花色),然后通过不同的初始化调用方法分配给相应的牌堆。

Shuffle组的方法都是用来随机数组的顺序,以便提高游戏的合理性Contains来判断牌的归属与否有就是pop出某张牌以下的牌。

动牌的过程中,事件的触发。

主要是对模型的划分和归类,牌类方法的归总(一张牌需要有哪些属性,需要get 和set哪些属性),数据结构的划分(分成四种:发牌的两个,七个主要的操作牌堆,四个接收结果的牌堆,移动中的牌堆)。

然后便是根据自己的需要来封装继承基本数据结构,对stack、queue的修改,也可以用java的stack或者queue,但是需要改动的东西比较多,所以反而不如自己利用对象引用来做一个类链表的东西。

再者,界面设计事件响应也需要填充,尤其是逻辑的完善,牌堆移动过程中,要注意,加入移动牌堆以后,如果是不符合的点击,需要撤回,要保存上一次的源牌堆,撤回的时候才能知道是哪个牌堆发出的。

游戏截图:。

面向对象纸牌游戏实验报告

面向对象纸牌游戏实验报告

面向对象纸牌游戏实验报告实验题目solitaire纸牌游戏实验目的设计一个简单的CardGames程序,运用面向对象封装、继承、抽象类、抽象方法、多态、动态绑定等概念。

实验目标就要求参考windows的纸牌游戏使用Java语音实验内容单人纸牌游戏,牌桌上有7个堆共28张牌,第一堆1张牌,第二堆2张,。

第7堆7张,每一堆的第一张牌朝上,其他朝下。

牌桌上还有4个suitpiles,一个deck card堆和一个discard card堆,布局如下程序总体设计纸牌游戏中对于类的设计共有Card,CardPile,DeckPail,DiscardPail,SuitPile,TablePail,Solitare 七个类。

简单地UML 图如下:1,Card 类:Card 类主要用于建立纸牌,共有以下几个属性,Card(int, int)rank()suit()faceUp()flip()color()draw(Graphics, int, int)width : intheight : intred : intCardPile CardSuitPile DiscardPai TablePail SolitareDeckPailblack : intheart : intspade : intdiamond : intclub : intfaceup : booleanr : ints : intlink : Card它主要定义了一个纸牌的属性,如颜色,长度,宽度,花色,是否背面朝上等。

2,CardPile类:这是个牌堆类,主要是作为基类,供各个堆来继承使用,它含有以下几个函数CardPile(int, int)top()empty()pop()includes(int, int)select(int, int)addCard(Card)display(Graphics)canTake(Card)3,Solitare类主要用于图形界面的显示x : inty : intfirstCard : Card它的每个属性和操作在子类中都会有重新定义。

纸牌游戏实验报告doc

纸牌游戏实验报告doc

纸牌游戏实验报告doc一、实验目的本实验的目的是通过玩纸牌游戏,观察不同规则下玩家的决策方式和行为,并分析对方的策略和背后的原因。

通过实验数据和观察结果,进一步了解人们在竞技游戏中的思维过程和策略选择。

二、实验设计本实验采用对抗性的纸牌游戏,斗牛进行实验。

游戏参与者分为A和B两个组别,在每局游戏中,A和B会交替出牌,直到其中一组别出现斗牛或者没有可继续出牌的牌为止。

出牌的规则如下:1.所有纸牌以正常顺序排列,共52张。

2.每个人从牌堆中抽取5张牌。

3.每次出牌时,可以选择出牌的张数,最少为1张,最多为手中的张数。

4.出牌有三种方式:a.出现斗牛:如果出牌的总和是10的倍数,则为斗牛,该组别获得胜利。

b.出现五小牛:如果出的牌的总和小于等于5,则为五小牛,该组别获得胜利。

c.出牌总和不为10的倍数,并且大于5的牛,被判定为输。

三、实验过程在开始游戏前,每个参与者都被告知游戏的规则,并了解每个决策的结果。

实验者们在游戏开始前先熟悉纸牌游戏的玩法,并进行一定次数的练习。

练习结束后,实验者们开始正式游戏,并在每局游戏结束后做出思考和总结。

四、实验结果与分析根据实验数据和观察结果,我们发现不同玩家在斗牛游戏中的决策方式和操作习惯存在一定差异。

有些玩家更加注重计算出牌总和,以确保出牌的总和是10的倍数或者小于等于5;而有些玩家则更加注重牌型的搭配和数量,以取得最高的点数。

在一些情况下,玩者往往会更加关注对方手中的牌型,并通过观察对方的出牌习惯来判断对方会出什么牌。

除了个人习惯和决策方式,我们还观察到一些公共策略的存在。

例如,在一局游戏中,如果其中一组别先出现斗牛的情况,另一组别往往会选择放弃该局游戏,以减少输牌的概率。

此外,有些玩家在对方出牌之后会花更多时间来思考自己的决策,以应对对方可能出现的斗牛牌型。

在实验的过程中,我们还发现有些玩家会在自己手中没有斗牛或五小牛的情况下选择继续出牌,这可能是因为他们希望通过尽可能出更多的牌来减少对方获得斗牛的机会。

“21点”纸牌游戏实验报告

“21点”纸牌游戏实验报告

课程设计报告课程名称:面向对象程序设计与开发课程设计设计题目:“21点”纸牌游戏年级:09系别:计算机学院专业:计算机科学与技术小组成员名单:陈坚鹏李浩艺陈子龙任课教师:莫家庆老师完成时间:2012年 3 月30 日肇庆学院计算机学院课程设计结果评定目录“21点”纸牌游戏 (1)1 概述 (1)2 实验内容 (1)3 概要设计 (2)4 测试结果和分析 (5)5 课程设计体会 (5)“21点”纸牌游戏1 概述本课程设计通过编写相关代码实现“21点”游戏。

使用语言:C++语言编译环境:VC++ 6.02 实验内容1、问题描述“21点”是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的派达到总分21而不超过这个数值。

扑克牌的分值取它们的面值,A充当1分或11分(由玩家自己选择一种分值),J、Q和K人头牌都是10分。

庄家对付1—7个玩家。

在一局开始时,包括庄家在内的所有参与者都有两张牌。

玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。

接下来,只要愿意,各个玩家都有机会再拿一张牌。

如果某个玩家的总分超过了21(称为“引爆”),那么这个玩家就输了。

在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。

只要庄家的总分等于或小于16,那么他就必须再拿牌。

如果庄家引爆,那么还没有引爆的所有我那家都将获胜,引爆的玩家打成平局。

否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。

如果二者的总分相同,则玩家和庄家打成平局。

基本要求:编写程序实现游戏,计算机作为庄家,1—7个人作为普通玩家参与游戏。

游戏程运行输出如下所示。

多少人加入游戏?(1—7):2输入第1位玩家的姓名:张三输入第2位玩家的姓名:李四游戏开始:庄家:<隐藏>梅花7张三:红桃7方块J总分值17李四:红桃J红桃3总分值13张三,你想再要一张牌吗(y,n)?n李四,你想再要一张牌吗(y,n)?y李四:红桃J红桃3梅花10总分值23李四引爆!庄家:方块10,梅花7总分值17张三,唉,你打平局了!李四,对不起,你输了!你想再玩一次吗(y,n)?2、需求分析(1)测试边界内的值。

Java大作业实验报告

Java大作业实验报告

XX大学2012-2013学年第2学期《JAVA面向对象程序设计》课程大作业报告课题名称:Java斗地主纸牌游戏小组成员人数5人小组成员名单(学号和姓名):自己:班级学号____姓名_______其他组员:课题实现采用的工具___eclipse(jdk 1.7.01)________课题完成时间:__2013/05/20____________________________对应提交的电子文档打包文件名称(准确填写):____斗地主.rar_________________________________一.大作业目的通过对斗地主纸牌游戏的程序设计,能更加深入了解面向对象的编程思想。

也对JA V A 这门语言能了解更多,能够正确并较为熟练的运用java进行图像化编程和使用java中的ui 控件。

二.题目与要求斗地主,基本上要有抢地主,出牌,托管功能,整个打牌过程尽量快速简介,尽量不出,规则参照QQ斗地主。

开发过程分工:1.首先列出程序所包含的功能,给出相应所需要的类包(规则;牌类)。

2.设计主窗体布局及菜单栏()登入窗口()。

3.设计抢地主事件及游戏过程中出牌时间的控制()4.设计电脑发牌()电脑判断并出牌()电脑代出()5.添加背景音乐及游戏主题环境的设计()6.包中各个类的整理及程序调试()7.程序中错误的修改以及对于程序的改进()代码编写:详见斗地主.rar(已发至gude@)四:希望达到的效果、1.将其他同学负责的部分添加到同一个工程下,并实现运行。

首先是将不同的文件导入到同一个包中,因为这份斗地主是参考一份网上下载的斗地主源码,所以每个人都是对相应的java代码文件进行相应的编译,所以工程的整体性没有大的问题。

只是不同的人设置了不同的变量名造成了系统的报错,在统一了变量名之后解决了这个问题。

2.设定游戏的主题环境原本的决定是参照传统的纸牌类游戏的界面进行设计,在窗口界面设计好之后我觉得传统的纸牌背景只是桌布背景过于呆板无趣,所以决定网上寻找合适的背景图做为背景。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

面向对象纸牌游戏实验报告
实验题目
solitaire纸牌游戏
实验目的
设计一个简单的CardGames程序,运用面向对象封装、继承、抽象类、抽象方法、多态、动态绑定等概念。

实验目标就要求
参考windows的纸牌游戏
使用Java语音
实验内容
单人纸牌游戏,牌桌上有7个堆共28张牌,第一堆1张牌,第二堆2张,。

第7堆7张,每一堆的第一张牌朝上,其他朝下。

牌桌上还有4个suitpiles,一个deck card堆和一个discard card堆,布局如下
程序总体设计
纸牌游戏中对于类的设计
共有Card,CardPile,DeckPail,
DiscardPail,SuitPile,TablePail,Solitare
七个类。

简单地UML图如下:
CardPile
Card
DeckPail DiscardPai TablePail SuitPile
l
Solitare
1,Card类:
Card类主要用于建立纸牌,共有以下几个属性,Card(int, int)
rank()
suit()
faceUp()
flip()
color()
draw(Graphics, int, int)
width : int
height : int
red : int
black : int
heart : int
spade : int
diamond : int
club : int
faceup : boolean
r : int
s : int
link : Card
它主要定义了一个纸牌的属性,如颜色,长度,宽度,花色,是否背面朝上等。

2,CardPile类:
这是个牌堆类,主要是作为基类,供各个堆来继承使用,它含有以下几个函数
CardPile(int, int)
top()
empty()
pop()
includes(int, int)
select(int, int)
addCard(Card)
display(Graphics)
canTake(Card)
,Solitare类主要用于图形界面的显示 3
x : int
y : int
firstCard : Card
它的每个属性和操作在子类中都会有重新定义。

其中x,y表示每个堆左上角的
坐标位置。

top(),pop(),isEmpty(),这三个类函数通过stack类所提供的成员函数来操纵纸牌列表。

另外还定义了5中虚拟函数:
1,includes 看给定的坐标位置是否在派对边界之内。

2,canTake 返回该牌堆是否可以取走特定纸牌。

3,addCard 增加一张纸牌到该牌堆
4,display 显示整幅牌堆
5,select 执行响应鼠标单击的行为
3,DeckPile,DiscardPile,SuitPile,TablePile分别继承于CardPile类,并对某些函数进行重写,以生成自己的牌堆。

代码分析1.发配算法
该算法先创建52张纸牌(Card)对象,并放置allCard(ArrayList)中,然后模拟现实当中的洗牌操作,主要是利用java的Random来打乱allCard里牌的排列顺序,然后初始化各个牌堆类: deckPile, discardPile, tablePile, suitPile, moveCard。

此外还建了一个数组allPiles(CardPile[]),用于存储所有的牌堆类。

最后将allCard中的纸牌牌(Card)对象分发至各个堆里。

2. select方法
传给该函数坐标用于判断点中该牌堆中的某张纸牌,其中因为TablePile要支持选中多张纸牌,要改写CardPile的方法。

CardPile的select方法:
public int select (int tx, int ty) {
if(includes(tx,ty)){
if(isEmpty())
return -2;
else
return thePile.size() - 1;
}
else
return -1;
}
TablePile的select方法:
public int select(int tx, int ty) {
// TODO Auto-generated method stub
if(!(isEmpty())){
int beginX,beginY,endX,endY;
//System.out.println(notFlipNum+" "+cardNum);
beginX = x ;
beginY = y + unFlipCardSeparation * notFlipNum;
endX = x + Card.width;
endY = beginY + unFlipCardSeparation * notFlipNum + separation * (thePile.size() - 1 - notFlipNum) + Card.height; boolean flip_include = beginX <= tx && tx <= endX && beginY <= ty && ty <= endY;
//System.out.println(beginY+" "+endY);
if(flip_include){
int c = (ty - beginY)/separation + notFlipNum;
if(c >= thePile.size()){
c = thePile.size() - 1;
}
return c;//从零开始
}
else
return -1;
}
else
return -1;
}
3. isCAnAdd方法
用于判断某张纸牌是否可以放于SuitePile或TablePile
CardPile类
Public boolean isCanAdd( Card card){
Return falase;
}
SuitePile类
Public boolean isCanAdd( Card card){
// TODO Auto-generated method stub
if (isEmpty())
return card.getNum() == 0;
Card topCard = top();
return (card.getType() == topCard.getType()) &&
(card.getNum() == topCard.getNum() + 1);
}
Tablepile类:
public boolean isCanAdd(Card card){
// TODO Auto-generated method stub
if ( isEmpty())
return card.getNum() == 12;
Card topCard = top();
return (card.getColor() != topCard.getColor()) &&
(card.getNum() == topCard.getNum()-1 );
}
4. refreshTablePile
用于刷新Tablepile,主要处理走TablePile中的纸牌是剩余纸牌都是背面
的时候将最上面的纸牌反过来。

public static void refreshTablePile(){
// System.out.println("refreshTablePile");
for(int i=0;i<7;i++){
if(tablePile[i].top() != null)
if(!(tablePile[i].top().isFaceup())){
tablePile[i].top().setFaceup(true);
tablePile[i].setNotFlipNum(tablePile[i].getNotFlipNum()-1); }
}
}
试验中的截图:
实验总结
实验基本实现了部分基本功能,但是比较与windows上的纸牌游戏功能有所欠缺,比如没有后退和提示功能,没有单击右键的功能,显的更加简陋。

由于类图画的比较麻烦,只是将类及其属性列举了出来,UML图画的比较简陋。

相关文档
最新文档