08届课程(设计)论文
题目网络斗地主
专业班级08信息与计算科学(1)班
学号
学生姓名许四平
指导教师赵祖国
指导教师职称讲师
学院名称理学院
完成日期:2011年6月25日
武汉工程大学本科课程设计(论文)
I
目录
目录..................................................................................................I
摘要.................................................................................................II
Abstact...............................................................................................................III
前言................................................................................................IV
第1章课题背景.......................................................................................1
1.1背景............................................................................................................1
1.2意义............................................................................................................2
1.3文献综述....................................................................................................2
第2章设计简介及设计方案论述...............................................................3
2.1游戏规则....................................................................................................3
2.2设计方案论述...............................................................................................3
第3章详细的设计方法............................................................................6
3.1功能结构图.................................................................................................6
3.2数据库建立................................................................................................7
3.3代码设计原理............................................................................................9
3.3.1服务器工程Serve代码设计:..............................................................9
3.2.2客户端工程Client代码设计:..............................................................16
第4章测试结果分析..............................................................................27
4.1测试数据......................................................................................................27
4.2测试结果......................................................................................................27
第5章不足与改进.................................................................................35
总结......................................................................................................36
致谢......................................................................................................37
参考文献.................................................................................................38
武汉工程大学本科课程设计(论文)
II
摘要
斗地主民间相传起源于湖北,据传是一位叫吴修全的年轻人,根据当地流
行的扑克玩法“跑的快”改编的。斗地主玩法简单,娱乐性强,老少皆宜,如今
已风靡整个中国,并流行于互联网上。尤其是三人斗地主,玩法简单,娱乐性
强,老少皆宜。该游戏由三个人玩,用一副或两副牌,地主为一方,其余两家
为另一方,双方对战,先出完牌的一方获胜。
此次设计以一副牌规则为准.本论文讲述了网络斗地主的游戏算法的设计,
游戏通讯部分的开发(多线程,socket)的设计过程。本设计采用MicrosoftVisual
Basic作为开发工具,结合socket编程,采用mysql数据库作为信息存储的工
具,利用ODBC连接数据库。利用C/S(服务器客服端)的信息反馈方式实现
服务器客户端信息的交流,进而完成斗地主过程。设计的大体方法是,先列出
斗地主游戏设计的种种操作,将这些操作一一以对应的指令作为操作码,按每
个对应的操作码(指令)展开代码编写,详细设计时不断地修正和完善,经过
测试阶段反复调试和验证,最终形成达到设计要求的可行系统,在内网外网均
可以调试通顺,可进行游戏。
关键字:斗地主,服务器,客户端,mysql,ODBC,C/S,socket
武汉工程大学本科课程设计(论文)
III
Abstact
Confilctlandlordfolklegendoriginatedinhubei,itisacallWuXiuQuanyoung
people,accordingtothelocalpopularpokerplay"torunofquickadaptationof".
Doulandlordplaysimple,entertaining,peopleofallagesandstrong,nowalready
fashionablewholeChina,allythreedoulandlord,
playsimple,entertaining,econsistsofthree
peopleplaying,uapairortwodeckofCARDS,thelandlordforaparty,andthe
remainingtwohomefortheotherparty,theparties,thebrandfirstoutagainsta
partywins.
pertellsthestory
ofnetworkdoulandlordgamethedesignofcommunication,thegameispartofthe
development(multiplethreads,thedesignprocessofthesocket).ThisdesignUSES
theMicrosoftVisualBasicasdevelopmenttools,combinedwiththesocket
programming,usingmysqldatabaasthetool,theuofinformationstorage
/S(rvercustomerrviceoftheinformation
feedbackwayrealizationrverthecustomerrvicecommunicationof
information,linesofthedesign
methodis,tomakedoulandlordgamedesignallkindsofoperationandwillthe
operationscharacterizedbythecorrespondinginstructionsasoperationcodes,
accordingtoeachcorrespondingoperationcodes(instruction)spreadcode,and
detaileddesignkeepscorrectionandimprove,afterrepeatedcommissioningand
validationtestingpha,andfinallyformtomeetthedesignrequirementsofthe
system,theconnectioninthefeasibleallcandebuggingissmooth,thenetcanbein
thegame.
Keyword:conflictlandlord,rver,theclient,mysqlODBC,C/S,socket
武汉工程大学本科课程设计(论文)
IV
前言
本文解决了在斗地主游戏中,实现了用户的注册,登录,服务器的发牌,
客户端的出牌,以及客户端的聊天,在房间内聊天,在牌桌上聊天等许多斗地
主游戏的功能,而在该程序的编写之初,就考虑到了程序的扩充,不仅仅是为
了写斗地主而写斗地主,在设计的时候考虑到了游戏种类的扩充,单个游戏功
能的扩充,诸如以后若有时间精力可以再补充添加升级,五指棋,围棋等其他
类的游戏,这样就形成了一个整个棋牌游戏系统,这才是我设计的最终目的。
此外游戏还充分考虑了游戏人数的人数,可以避免如果在线人数过多,服务器
崩溃的问题,由此而采取缓冲区来缓存数据。
全文总共分为5章,分别比较详细的讲述了我的设计思路,和我对该课题
的理解。
第1章介绍了问题背景、以及用网络斗地主游戏的的实用性,及在娱乐生
活中的意义。
第2章主要介绍了我在程序设计中的思路,设计的算法,运用模块,编写
程序,给出了我的设计模型。
第3章绍了我的详细的设计思路,编程求出了具体的网络斗地主的编程方
案和界面设计和模块的设计以及各种功能函数的编写。
第4章则是测试的结果分析,给出了游戏中的各项操作,以及在斗地主游
戏进行中程序运行的情况,给出相应的截图和说明,很好的表明了问题。
第5章是介绍的是此次设计的不足和需要改进的地方。
最后总结了程序设计在实际生活中的广泛运用,以及学好程序对我们学习
生活的帮助,接着是致谢、参考文献。
许四平
2011-6-25于武汉工程大学理学院
武汉工程大学本科课程设计(论文)
1
第1章课题背景
1.1背景
网络游戏正处于加速发展周期中,中国网络游戏市场迅速扩大,近三年的
年均增长率超过100%。网络游戏的告诉发展,逐渐引起了我国政府的高度重
视,信息产业部、文化部、新闻出版总署相关部门都在积极推动各项市场监管
和鼓励网络游戏产业发展的政策措施的出台,2003年网络游戏首次被正式纳入
国家863计划,标志着我国网络游戏产业已经得到政府的充分重视。除外,在
网络游戏产业发展的同时,有力带动了相关行业的发展,如软件、计算机、通
信、电信运营、互联网等,根据统计,网络游戏能够带动10倍于自身产值的
相关行业的发展。预计未来三年,中国游戏规模将保持60%以上的告诉增长,
至2010年市场规模将接近1000亿元,而多样的资本运作模式将成为网络游戏
产业发展的重要推动力。同时,手机游戏、家用游戏机、游戏传媒、电子竞技
等游戏周边行业也将快速发展起来。
网络斗地主作为一款网络游戏,深受大众喜爱,斗地主游戏对抗性和配合
性都很强。该游戏由三个人玩(四人也能玩),用一副牌共54张牌。每局牌有
一个玩家是“地主”,地主为一方,其余两家农民为另一方,双方对战,地主的
目标是(以合法的出牌方式)先出完手里所有的牌,而农民的目标是在地主出完
牌以前,先出完手里所有的牌。先出完牌的人所代表的一方获胜。斗地主属于
基础类扑克游戏的范畴斗地主后期又增加了网络斗地主,纳入了比赛制,已竞
技为中心。如:淘汰赛制、循环赛制、双败淘汰赛制、积分晋级赛制、分组出
线赛制、打立出局赛制、瑞士移位赛制、复活赛制等,以上的赛制在JJ比赛中
得到的充分体现。
武汉工程大学本科课程设计(论文)
2
1.2意义
诸如斗地主之类的网络小游戏制作的目的是满足了人们休闲的需要,在紧
张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之
间的交流,沟通,通过游戏还可以认识更多的朋友,也可以到达跨省、跨市,
甚至跨国间人们互相娱乐的目的。
通过此次课题的设计,掌握制作一个游戏软件的方法,以及制作游戏软件
的整个流程,制作游戏软件的步骤,为以后的就业工作打下基础。
1.3文献综述
文献[1]讲的是VB中的基础知识,为我游戏界面的制作,其中对于winsock
的讲解,很大程度上为我如何实现网络数据传输提供工很好的参考工具。
文献[2]讲的主要是VB和MYSQL数据库,该书主要见的MYSQL数据库
的语法,如何建立数据库,如何用VB连接数据库,等。
武汉工程大学本科课程设计(论文)
3
第2章设计简介及设计方案论述
2.1游戏规则
游戏规则是模仿网络上普通的斗地主游戏,主要是自己打的牌是否大过参
照牌的问题。当前,前提是点击张数相同的牌,若点击的是牌数不相同,或者
选择的牌型不同,或者牌面不够大,则不可以打出去,并提示玩家错误信息。
否则,可以将牌打出去,并在各方游戏区域显示牌。
游戏过程,任意一家(假设为A方)打出牌后必须同时向其他玩家发送出
牌的信息。其他各方(假设为B或C方)在获取信息后即显示A方剩余的牌
数,当A方剩余牌数为0,则提示A方胜利。其他各方失败的信息。
2.2设计方案论述
1.开发平台选择:基于VB,全称VisualBasic,它是以Basic语言作为其
基本语言的一种可视化编程工具。VB开发效率高,但是入门和学习速度快,
有较好的学习氛围和帮助书籍和帮助文档,界面建立简单,可视化效果好,代
码用法相对容易掌握,因此我采用次开发工具。
2.数据库:MYSQL数据库,它作为一款免费的数据库,适用于很多中小企
业管理使用,本设计要求不大,数据库的要求也不算太高,应此选择此数据库,
3.必备其他软件:Apprv,内封装有MYSQL数据库,ODBC作为数据库
连接使用。
4.。WindowsSockets规范
WindowsSockets规范以ey大学BSDUNIX中流行的Socket接
口为范例定义了一套MicosoftWindows下网络编程接口。它不仅包含了人们所
熟悉的BerkeleySocket风格的库函数;也包含了一组针对Windows的扩展库
函数,以使程序员能充分地利用Windows消息驱动机制进行编程。
WindowsSockets规范本意在于提供给应用程序开发者一套简单的API,
武汉工程大学本科课程设计(论文)
4
并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,
WindowsSockets也定义了一个二进制接口(ABI),以此来保证应用Windows
SocketsAPI的应用程序能够在任何网络软件供应商的符合WindowsSockets协
议的实现上工作。因此这份规范定义了应用程序开发者能够使用,并且网络软
件供应商能够实现的一套库函数调用和相关语义。
遵守这套WindowsSockets规范的网络软件,我们称之为WindowsSockets
兼容的,而WindowsSockets兼容实现的提供者,我们称之为WindowsSockets
提供者。一个网络软件供应商必须百分之百地实现WindowsSockets规范才能
做到现WindowsSockets兼容。
任何能够与WindowsSockets兼容实现协同工作的应用程序就被认为是具
有WindowsSockets接口。我们称这种应用程序为WindowsSockets应用程序。
WindowsSockets规范定义并记录了如何使用API与Internet协议族(IPS,
通常我们指的是TCP/IP)连接,尤其要指出的是所有的WindowsSockets实现
都支持流套接口和数据报套接口.
应用程序调用WindowsSockets的API实现相互之间的通讯。Windows
Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。
虽然我们并不反对使用这一套API来实现另一通讯协议栈(而且我们期望
在将来规范的修改中能够讨论这个问题),但这种用法已经超出了我们这一份
规范所规定的范围,我们在此将不作讨论。
4.简要设计方法介绍
利用C/S(服务器客服端)的信息传送反馈方式。给每条与斗地主操作有
关的操作(包括各种数据的修改显示等等)赋予指令,以每条指令作为基准进
行迭代,按不同的操作编写不同的函数放入不同模块中,这样就玩完成了整个
斗地主游戏。
完成后进行编译生成可执行文件,服务器放在自己的主机,客户端发配到
网上。网络上的任何一台计算机都可以连接到服务器,运行客服端后,先注册
账号,然后登录,进游戏大厅,选择游戏(这里默认为斗地主,主要是时间问
武汉工程大学本科课程设计(论文)
5
题,以后有时间会扩充的),进入游戏房间,找空闲椅子坐下,点击准备,当
你的牌桌上的其他好友都游戏开始后,就可了开始游戏了。在游戏过程中用户
可以在牌桌上聊天,也可到房间内聊天,但不能泄露牌的秘密(这点以后的扩
充中会考虑的,将对么些话进行限制,目前可以随便聊天)。
武汉工程大学本科课程设计(论文)
6
第3章详细的设计方法
3.1功能结构图
功能结构如下图:3.1-1
注册
注册成功
登录
检测,登录成功
选择游戏(默认斗地主)
进入房间(前提房间未满)
1.房间内聊天
2.点击空桌子进入游戏
1.牌桌上聊天
2.三家都准备,开始游戏
发牌(随机,保持公正性)
玩家抢地主
发底牌给地主,显示给其他玩家
玩家开始出牌
每出一次牌服务器检测并转发其他玩家,
牌出完,游戏结束,修改各项信息
包含金币积分,胜率等等,部分信息存入数据库
图3.3-1
服
务
器
客
服
端
武汉工程大学本科课程设计(论文)
7
3.2数据库建立
数据库是用与存放用户信息的仓库,数据库的设计必须能够方便系统查
找,尤其是在数据库数据庞大时必须考虑查找数据的效率。游戏中总共设计了
一个gamedb数据库和三张基本表。
用户注册表createtableifnotexistst_reg(
autoidintAUTO_INCREMENTNOTNULLPRIMARYKEY,/*用户数字
ID*/
unamechar(16)BINARYNOTNULLUNIQUEkey,/*用户注册名*/
nickchar(16)BINARYNOTNULL,/*用户呢称*/
pwdchar(32)NOTNULLdefault0,
num_faceintnotnull,
stateintnotnulldefault0,
dtimeTIMESTAMPdefaultcurrent_timestamp
)ENGINE=MyISAM;
注册后的mysql数据库数据,如图3.2-1
图3.2-1
武汉工程大学本科课程设计(论文)
8
用户登录表createtableifnotexistst_online(
unamechar(16)BINARYNOTNULL,
timeTIMESTAMPdefaultcurrent_timestamp,
tokenintnotnull,
ipchar(20)notnulldefault0,
stateintnotnulldefault0,
nickchar(16)BINARYNOTNULL
)ENGINE=MyISAM;
用户登录后数据库显示登录的信息,如图3.2-2
图3.2-2
用户金币表createtableifnotexistst_coin(
unamechar(16)BINARYNOTNULLPRIMARYkey,
nickchar(16)BINARYNOTNULL,
vipintnotnulldefault0,
coinintnotnulldefault0,
winintnotnulldefault0,
lointnotnulldefault0
)ENGINE=MyISAM;
武汉工程大学本科课程设计(论文)
9
数据库中金币表的信息,如图3.2-3
图3.2-3
3.3代码设计原理
采用winsock控件对信息信息的接受和发送,建立winsock控件数组,用TCP
作为网络协议,每一个登录用户动态的分配,分配一个winsock控件数组的一
个值,作为识别该用户以及查找、发送、接收、修改与该用户有关的信息的标
准。
将客户端或服务器发送来的数据存入各自缓冲区的消息列,等候消息处理函
数do_message按指令进行处理,处理后消息列清空,等候下一消息的写入。这
形成一个接收消息、存入消息、判断消息、处理消息、清空消息、再接收消息、
再写入消息……的循环模式。
在处理消息阶段,按自定义消息的格式以各自的方式(及对应模块中的功能
函数)对消息处理,消息处理过程中,需要修改数据库或者结构体中信息就进
行修改。
3.3.1服务器工程Serve代码设计:
Serve工程,如图3.3-1
武汉工程大学本科课程设计(论文)
10
图3.3-1
1.主界面StartServe,启动服务器界面,主要完成服务的启动,关闭,将客
户端传来的信息转移到缓冲区的消息列中,等候处理。如图3.3-2
图3.3-2
2.功能模块的介绍
(1)com模块主要是建立存储用户部分信息的结构体,定义程序中必要的
一些参量,初始化某些结构体或其他变量。
武汉工程大学本科课程设计(论文)
11
(2)do_message模块用于处理消息,在缓冲区的消息列中用timer时间计时
器来循环调用do_msg函数按指令处理消息,下面给出服务器do_msg函数的代
码,如下:
PublicFunctiondo_msg(ByValindexAsInteger)
DimjAsInteger
Forj=0Tobuf_msg_max-1
Ifurb(index).ubuf(j).if_buf_state=1Then'当消息列有消息时,进行处理
in_cmd1=urb(index).ubuf(j).buf(6)
in_cmd2=urb(index).ubuf(j).buf(7)
count_msg=urb(index).ubuf(j).buf(8)'消息类型的个数
Dimget_msg(buf_msg_max-1)AsString
get_msg(j)=StrConv(urb(index).ubuf(j).buf,vbUnicode)'//字节数组转化字
符串
SelectCain_cmd1
Ca0
'注册
SelectCain_cmd2
Ca1
'判断是否可以注册
read_msgindex,count_msg,get_msg(),j
if_registeach_msg(),j,index'
判断是否可以注册
Ca2
'开始注册
read_msgindex,count_msg,get_msg(),j
start_registeach_msg(),j,index'
开始注册
武汉工程大学本科课程设计(论文)
12
EndSelect
Ca1
'登录
SelectCain_cmd2
Ca1
'用户登录
read_msgindex,count_msg,get_msg(),j
check_ureach_msg(),j,index,count_msg
EndSelect
Ca2
SelectCain_cmd2
Ca1'显示
游戏人数,默认为斗地主
Dimgame_idAsInteger'还回游戏编号
read_msgindex,count_msg,get_msg(),j
game_id=each_msg(0)
ndNUMgameCStr(game_id),j,index
Ca2'进入房间
后,显示房间好友信息
read_msgindex,count_msg,get_msg(),j
DoEvents
Ifinto_room(each_msg(),j,index,count_msg)=TrueThen
SendOthersInRoom2,4,each_msg(),j,index,count_msg'将
进入出信息发给其他同房间的好友
EndIf
Ca3'退出房间
武汉工程大学本科课程设计(论文)
13
界面
read_msgindex,count_msg,get_msg(),j
SendOthersInRoom2,5,each_msg(),j,index,count_msg'将退
出信息发给其他同房间的好友
urb(index)._hand=0
urb(index)._hou=0
urb(index)._game=0
urb(index)._chair=0
urb(index)._desk=0
EndSelect
Ca3
'直接完全关闭游戏,前提游戏界面已经关闭
SelectCain_cmd2
Ca0
read_msgindex,count_msg,get_msg(),j
SendOthersInRoom2,5,each_msg(),j,index,count_msg'将从
房间直接关闭游戏的信息发给其他同房间的好友
cloGameeach_msg(),j,index,count_msg
EndSelect
Ca4
SelectCain_cmd2
Ca0'在房间里,与同房间
好友群聊,服务器转发
DimTranChat()AsByte
ReDimTranChat(urb(index).ubuf(j).bytotal)AsByte
CopyMemoryTranChat(0),urb(index).ubuf(j).buf(0),
urb(index).ubuf(j).bytotal
武汉工程大学本科课程设计(论文)
14
chatroomTranChat(),index
read_msg1index,count_msg,get_msg(),j
EndSelect
Ca5
SelectCain_cmd2
Ca0'点击桌子的某个椅子,入座
read_msgindex,count_msg,get_msg(),j
IfSitDown(each_msg(),j,index,count_msg)=TrueThen
SendOthersOnGame5,2,each_msg(),j,index,count_msg'将进
入出信息发给其他同房间的好友
EndIf
EndSelect
Ca6
SelectCain_cmd2
Ca0'在游戏中,与同房间好友群聊,服务器转发
ReDimTranChat(urb(index).ubuf(j).bytotal)AsByte
CopyMemoryTranChat(0),urb(index).ubuf(j).buf(0),
urb(index).ubuf(j).bytotal
chatgameTranChat(),index
read_msg1index,count_msg,get_msg(),j
Ca1'有玩家要开始游戏,即招手
read_msgindex,count_msg,get_msg(),j
WantStarteach_msg(),j,index,count_msg
Ca2'玩家还回已发完牌信息
read_msgindex,count_msg,get_msg(),j
Re_FinishGetPukeach_msg(),j,index,count_msg
Ca3'最先可以抢地主玩家是否抢地主
武汉工程大学本科课程设计(论文)
15
read_msgindex,count_msg,get_msg(),j
If_dizhueach_msg(),j,index,count_msg
EndSelect
Ca7'检查玩家发来的牌
SelectCain_cmd2
Ca0
read_msgindex,count_msg,get_msg(),j
CheckPukeach_msg(),j,index,count_msg
EndSelect
EndSelect
free_bufindex,j'清空
消息列缓存
EndIf
Nextj
EndFunction
(3)Game模块用于处理玩家进入游戏桌子后在游戏中的各项操作,包括聊
天以及斗地主游戏等。
(4)Login模块处理用户请求登录信息
(5)Make_Message模块用于将发给用户的信息自动生成生成相应传递消息
格式,以利于客户端识别读取。分别包含两种读消息函数read_msg1和
read_msg;以及两种生成并发送消息函数,make_msg1和make_msg。read_msg
函数读取make_msg发送的消息,read_msg1函数读取make_msg1发送的消息
(6)Regist模块用于处理用户注册信息
(7)Room模块用于处理玩家进入房间后在游戏中的各项操作,包括聊天以
及以及选择牌桌等。
(8)Visit_db模块是服务器连接数据库,以对数据库各项操作。
武汉工程大学本科课程设计(论文)
16
3.2.2客户端工程Client代码设计:
Client工程如图3.3-3
图3.3.3
1.登录界面LoginWindow,用于用户登录,如图3.3.4
武汉工程大学本科课程设计(论文)
17
图3.3.4
2.注册界面Regist,用于用户注册。如图3.3-5
图3.3-5
3.房间界面中游戏大厅如图3.3-6,房间界面如图3.3-7
图3.3-6
武汉工程大学本科课程设计(论文)
18
图3.3-7
4.游戏桌子GameTable,如图3.3-8
图3.3-8
5.各功能模块的设计
武汉工程大学本科课程设计(论文)
19
(1)com模块主要是建立存储用户部分信息的结构体,定义程序中必要的
一些参量,初始化某些结构体或其他变量。
(2)do_message模块用于处理消息,在缓冲区的消息列中用timer时间计时
器来循环调用do_msg函数按指令处理消息,下面给出客户端do_msg函数的代
码,如下:
PublicFunctiondo_msg()
DimjAsInteger
Forj=0Tobuf_msg_max-1
(j).if_buf_state=1Then'当消息列有消息时,进行处理
in_cmd1=(j).buf(6)
in_cmd2=(j).buf(7)
count_msg=(j).buf(8)'消息类型的个数
Dimget_msg(buf_msg_max-1)AsString
get_msg(j)=StrConv((j).buf,vbUnicode)'//字节数组转化字符串
SelectCain_cmd1
Ca0
'Regist
SelectCain_cmd2
Ca1
'用户名可以使用
1(0).Caption="该用户名可以使用"
Ca2
'用户名已存在
1(0).Caption="用户名已存在"
Ca3
'Regist成功
武汉工程大学本科课程设计(论文)
20
"Regist成功"
n="Regist成功"
MsgBox"哈哈,恭喜喽Regist成功!!"
Unloadregist
EndSelect
free_bufj
'释放缓存
Ca1
'登录
SelectCain_cmd2
Ca1
'登陆失败,用户名密码错误
"用户名或密码错误"
(1).Caption="用户名或密码错误"
Ca2
'登陆成功
read_msgcount_msg,get_msg(),j
writeTotypeeach_msg(),j,count_msg
'登录信息写入结构体
c_logineach_msg(),j,count_msg
e=Fal
EndSelect
free_bufj
'释放缓存
Ca2
SelectCain_cmd2
Ca1'显示在
武汉工程大学本科课程设计(论文)
21
线人数,游戏人数,房间人数,游戏默认斗地主
read_msgcount_msg,get_msg(),j
sh_online_gameeach_msg(),j,count_msg
Ca2
'房间满员
MsgBox"房间已满,请重新选择房间!"
Ca3'房间未
满,可以进入
read_msgcount_msg,get_msg(),j
roomNotfulleach_msg(),j,count_msg
ShowDeskeach_msg(),j,count_msg'显示房间座位情况
ible(1)=True
=1
Ca4'某个好友,进入相同游戏和房间,告知你
read_msgcount_msg,get_msg(),j
OtherInRoomeach_msg(),j,count_msg
Ca5'某个好友,退出你在的游戏和房间,告知你
read_msgcount_msg,get_msg(),j
OtherOutRoomeach_msg(),j,count_msg
EndSelect
free_bufj
'释放缓存
Ca3
SelectCain_cmd2
Ca0
"完全退出游戏"
End
武汉工程大学本科课程设计(论文)
22
EndSelect
free_bufj
'释放缓存
Ca4
SelectCain_cmd2
Ca0'房间内群聊天
read_msg1count_msg,get_msg(),j
.U_chatRoom=""Then
.U_chatRoom=each_msg(0)
ChatAllRoomeach_msg(),j,count_msg
El
.U_chatRoom=each_msg(0)Then
ChatAllRoomeach_msg(),j,count_msg
free_bufj
'释放缓存
EndIf
EndIf
EndSelect
Ca5
SelectCain_cmd2
Ca0
MsgBox"该座位已有人,呵呵,换个座位吧"
Ca1'成功进入房间
read_msgcount_msg,get_msg(),j
ChangeRoomeach_msg(),j,count_msg
ShowPeoGameeach_msg(),j,count_msg'显示游戏中
listview情况
武汉工程大学本科课程设计(论文)
23
CanOnGameeach_msg(),j,count_msg
State=1'窗体最小化
Ca2
read_msgcount_msg,get_msg(),j
Otherongameeach_msg(),j,count_msg'有人进入你所在游
戏的房间并且点击了某个椅子,告知你
EndSelect
free_bufj'释放
缓存
Ca6
SelectCain_cmd2
Ca0'在游戏中聊天
read_msg1count_msg,get_msg(),j
.U_chatGame=""Then
.U_chatGame=each_msg(0)
ChatAllGameeach_msg(),j,count_msg
El
.U_chatGame=each_msg(0)Then
ChatAllGameeach_msg(),j,count_msg
free_bufj
'释放缓存
EndIf
EndIf
Ca1
read_msgcount_msg,get_msg(),j
"'某个人进入某个桌子点击开始游戏(招手)后,
武汉工程大学本科课程设计(论文)
24
将你游戏中的各窗体信息改变"
OtherHandeach_msg(),j,count_msg'某个人进入某个桌子
点击开始游戏(招手)后,将你游戏中的各窗体信息改变
Ca2
read_msgcount_msg,get_msg(),j
1(_desk).Visible=Fal'游
戏中玩家招手消失,表示已经开始游戏
2(_desk).Visible=Fal
3(_desk).Visible=Fal
"开始发牌"
DimmmAsInteger
Formm=0To17-1
Next
PukSorteach_msg()
ate=1'表示进入发牌
LoadmypukCurrentPuk()'发牌
FinishGetPuk
Ca3'最先归谁抢地主
read_msgcount_msg,get_msg(),j
PukTimers=each_msg(5)
If_Robeach_msg(),j,count_msg
'EndIf
Ca4'随机分配最先的叫地
主的是否抢地主
read_msgcount_msg,get_msg(),j
PukTimers=each_msg(5)
If_Robeach_msg(),j,count_msg
武汉工程大学本科课程设计(论文)
25
Ca5'玩家是否抢地主
read_msgcount_msg,get_msg(),j
If_Robeach_msg(),j,count_msg
Ca6'显示底牌
read_msgcount_msg,get_msg(),j
ShowSubPukeach_msg(),j,count_msg
EndSelect
free_bufj
Ca7
SelectCain_cmd2
Ca0'当前有玩家发送出牌信息过来
"玩家出牌来啦"
read_msgcount_msg,get_msg(),j
OtherPukComeeach_msg(),j,count_msg
EndSelect
free_bufj'释放缓存
EndSelect
EndIf
Nextj
EndFunction
(3)Game模块主要是牌桌上的一些操作,聊天出牌等
(4)Room模块用于处理玩家进入房间后在游戏中的各项操作,包括聊天
以及以及选择牌桌等
(5)MePutPuk模块生成我出的牌,处理我出牌后,数据修改和牌的显示,
等等
(6)OtherPutPuk模块用于处理当其他玩家出牌后,相应的数据就修改和牌
的显示等等
武汉工程大学本科课程设计(论文)
26
(7)PukRules模块用来规定出牌规则,在com模块中定义了当前出牌状态
NowPukState,当前牌的状态,我统计之后,只可能37种类型,此外我定义0
和38表示不规范出牌和不出牌,一般与比较牌型。
各种牌型表示如下:
'0表示不规范的牌类型,1表示单个,2表示一对,
'3表示三不带,4表示三带单个,5表示三带一对,
'6四张炸,7四带2个,8四带2对,
'9表示3连对,10表示4连对,11表示5连对,12表示6连对,13
表示7连对,14表示8连对,15表示9连对,16表示10连对,
'17表示2飞机不带,18表示3飞机不带,19表示4飞机不带,20表
示5飞机不带,21表示6飞机不带,
'22表示2飞机带两单个,23表示3飞机带3单个,24表示4飞机带4
个,25表示5飞机带5个,
'26表示2飞机带一对,27表示3飞机带3对,28表示4飞机带4对,
'29表示5顺,30表示6顺,31表示7顺,32表示8顺,33表示9顺,
34表示10顺,35表示11顺,36表示12顺
'37王炸
'38表示不出牌
(8)Make_message模块用于将发给服务器的信息自动生成事先协调好了的
相应传递消息格式,以利于客户端识别读取。分别包含两种读消息函数
read_msg1和read_msg,以及两种生成并发送消息函数,make_msg1和
make_msg。read_msg函数读取make_msg发送的消息,read_msg1函数读取
make_msg1发送的消息
武汉工程大学本科课程设计(论文)
27
第4章测试结果分析
4.1测试数据
注册账号1:用户名:平不信云密码:123
注册账号2:用户名:刘德华密码:123
注册账号3:用户名:天马密码:123
4.2测试结果
1.注册,平不信云(平不信云为例)如图4.2-1
图4.2-1
2.登录平不信云(平不信云为例)如图4.2-2
武汉工程大学本科课程设计(论文)
28
图4.2-2
3.进入游戏大厅(以平不信云为例)如图4.2-3
图4.2-3
武汉工程大学本科课程设计(论文)
29
4.进入房间后(以平不信云为例),房间内有人,刘德华和天马,开始聊聊天,
如图4.2-4
图4.2-4
5,发现刘德华和和天马准备,平不信云坐上椅子,进入牌桌,准备好。开始
游戏,有人抢地主,如图4.2-5
图4.2-5
武汉工程大学本科课程设计(论文)
30
7.平不信云抢到地主4.2-6
图4.2-6
8,接下来就是出牌了,现在将列举一些能出的牌型,给出,
(1)出单张如图4.2-7
武汉工程大学本科课程设计(论文)
31
图4.2-7
(2)连对,如图4.2-8
图4.2-8
武汉工程大学本科课程设计(论文)
32
(3)出一对,如图4.2-9
图4.2-9
(4)出顺子,如图4.2-10
武汉工程大学本科课程设计(论文)
33
图4.2-10
(5)3带一对,如图4.2-11
图4.2-11
(6)出飞机不带。如图4.2-12
武汉工程大学本科课程设计(论文)
34
图4.2-12
武汉工程大学本科课程设计(论文)
35
第5章不足与改进
该程序,总的来说,基本可以实现网上斗地主,但有以下几点不足之处,
希望以后能够抽出时间,对它进行改进。
(1)该程序虽然有几千行代码,从规模上来说只是个小型的程序,他不能满
足更多的人一起,登录服务器,玩游戏,应为我的Winsock控件数组最
大下标只有200,也就是说只能容纳200人同时在线,还有就是客户端
房间数明显不多,不能满足更多客户的需求,这点需要改进。
(2)程序的服务器客户端,均采用VB编写,客户端采用VB写,运行效率
没多大关系,但是服务器用VB编写,效率不高,当用户量大增时,可
能满足不了要求。
(3)数据在网络的传送,没有进行加密,可以说信息没有保密性,若要进行
使用,则必须加一些保密算法。我的程序在设计之初,就考虑到了扩充,
可以在以躬耕扩充加入保密算法,只需再写加密函数和解密函数就可以
了。
武汉工程大学本科课程设计(论文)
36
总结
此次设计是我的一次大胆尝试,老师给我们布置了这个任务后,老师给我
们讲的当然不会所有细节都给讲到,很多地方老师都是点到为止,只算是说了
一个大体框架,要实现什么功能,就希望我们自己领悟,这样很多不明白的地
方就需要我自己摸索,其实我也感谢老师,没说的太具体,不然我就会完全按
老师的思路来写,那样就达不到一个自我提升的目的。而在自己,摸索的过程
中,发现一个问题,解决一个问题,不懂的问题,查资料,所有问题都是自己
解决,这样可能虽然慢一些,但是却完完全全的锻炼了自己的编程思维能力,
和自我思考的能力,可以说已经形成了一个初步的编程体系,这个斗地主程序,
说不上大型程序,但是究其代码量来看,对于我来说已经是个很大突破了。这
让我对自己也有了一个较高的认识,增加了我在编写代码方向上的自信,我会
在以后继续学习,不断加强自己。
老实说,这个程序,我的确花费了不少时间,有的时候写代码,调试到转
钟几点钟,但是成果出来了,很多都是值得的,所以我也很欣慰。
当然,斗地主代码,有很多需要完善的地方,要面面俱到,肯定需要花时
间而现在又很忙,所以等以后再有时间,再进一步完善。
武汉工程大学本科课程设计(论文)
37
致谢
此次的程序,从思路上,是我根据要求的来进行模型的构造,模块的定义,
函数的设计,及整个代码的编写。但是,即便如此,我仍然要感谢给我帮助的
同学,在程序测试的过程中,上官同学在程序的可行性以及优化方便给了一些
的建议,我在这里向他表示感谢。
此外我应该感谢我们的赵老师,他给我们讲解了设计所用到的很多东西,
包括服务器客户端,传输信息的结构,建立缓冲区,让我们编写代码是必须考
虑大实用性和可行性,这都让我对设计有了一个比较明确的方向,这让我能够
一直一直的将代码写完,而中途没有走多少弯路。此外有些自己一伙的问题,
向他咨询后,都能的得到一个完整满意的答案,心里是挺感谢他的。因此,我
在这里向他说声谢谢。
武汉工程大学本科课程设计(论文)
38
参考文献
[1]VisualBasic6.0时尚编程百例.机械工业出版社.2001年
[2]陈豫龙何旭洪VisualBasic6.0数据库开发实例导航.人民邮电出版
社.2002年
本文发布于:2023-03-05 03:54:11,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1677959652141758.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:四人斗地主两副牌玩法.doc
本文 PDF 下载地址:四人斗地主两副牌玩法.pdf
留言与评论(共有 0 条评论) |