c++课程设计五子棋游戏

巡山小妖精
882次浏览
2021年01月18日 14:52
最佳经验
本文由作者推荐

孕妇每月食谱大全-伤仲永ppt

2021年1月18日发(作者:柏古)
--

一、课程设计目的、任务和内容要求:


《计算 机语言程序设计》是一门以编程实践为主的专业课,目的在于培养学生利
用计算机语言进行软件开发所必 需的基本思想和基本技能,进一步提高综合应用计算
机语言的各种编程知识和技巧进行程序设计的能力< br>,
通过本次课程设计,
学生应能达到
具备设计功能较为复杂的应用程序的能力< br>,
同时培养学生自主学习和独立创新的精神。


任务如下:




1.
进行需求分析和概要设计,给出流程图。




2.写出详细设计,熟悉其中采用的关键技术。

3.
给出具体的编码实现并调试。

4.
写课程设计报告提交源程序。


内容要求:

设计并完成软件系统。要求:

1.
应具有简洁友好的用户界面。

2.要求软件系统的功能完整。

3.
要求程序具备正确性
,
可读性和运行的高效性。








--
--
二、进度安排
:
第1
~3
天:

查找资料
,
进行需求分析和概要设计;


4

6
天:


各模块的详细设计
;

7
~1
2
天:

软件实现与调试;


1
3~14天
:
写课程设计报告并提交源程序。









三、主要参考文献:

[1]
四维科技
,
丁展
,
汤倩.
V

s

al
C++
游戏开发 技术与实例
[M].
北京
:
人民邮电出
版社
,2

05
[

]
求是科技
,
张宏林.Visu
al C++ 6.0
程序设计与开发技术大全
[M]


北京
:
人民邮电出版社
,20

5
[3]
汪翔,
袁辉
.Visual
C++
实践与提高
(
网络编程篇
)[M]


北京:
中国铁道出版社
,20

1

4]
黄维通
.Vis
ual
C++
面向对象与可视化程序设计
[M].
北京
:
清华大学出版社,

003
[5]
谢希任
.
计算机网络
(
第4版)
[M]


北京
:
电子工业出版社
,2005
[6](

)W. Ric

ard Ste
ve
ns

TCP/

P
详解卷
1:
协议
[M

.
北京:机械工业出
版社
,2005
[

]
北京现 代富博科技有限公司
,
陈兵旗
,
孙明
.
北京:
Vis

a


C+
+
实用图象处理
专业教程
[M]
.清华大学出版社
,2

0


[8]
张 静.
Windo

s
多媒体编程基础
[M].
北京
:
清化大学出版社
,2

05
[9
]
刘振安,
徐峰
.Wind

ws
实用编程指南[M
].
北京
:
人民邮电出版社
,1

95
[10
]刘长明
,
杨工明
.Vis

al
C

+
实践与提高
(
多媒体篇)
[M].
北京
:
中国铁道出版

,2

01




指导教师签字
:






--
--






























--
--










………………………………………………………………………………………

II
A

st

act
…………………………………………… ……………………………………
.

.

II
1
绪论

……………………
.
……………………………………
.. 1
1.1
课题背景


…………………………………………………………………………
...
1
1.


课程设计的目的
…………………………………………
..
…………………………

1



设计方案简述

………………………………………

.
…………………
.. 2
2

1
可行性分析
………………………………………………

.
…………………………
.


2.


需求分析
…………………………………………………


…………………………
.2

3
详细设计
……………………………………………………………
..
………………
.
.< br>3

.
1窗体设计
………………………………………………
..
……………………………
..3

3.2
游戏项目开发
………………………………………
.

…………………………………



.2
.1棋牌设置
…………………………………………………………… ……………
..

5

.2


放置棋 子功能的开发
………………………………………………………………

.6
3.

.3
游戏获胜决断的开发
……………………………………………………
.
………
.12
3

2.
4游戏的调试与运行< br>…
………………………………………

……………
20

4
设计结果及分析
………………………………………………
..
… …
.
……………

2
4.1
程序的结果
……… ………………………………

………………………………
..22


4.2
结果分析
…………………………………………

.
… ……………………………
.

23


5




……
.

…………… ……………………………………

.………………………
24

参考文献

……

………………
..
……………… ………………..………………………
25






--
--








网络游戏的出现代表了一种全新娱乐方式的诞生。
目前网络游戏正以其独 特的魅力吸引
着众多的玩家。随着游戏产业的蓬勃发展,将需要越来越多的人加入到游戏开发中来。
本毕业设计所完成的五子棋游戏
(网络版)
是在
Wind
o< br>w


X
P下使用
Micro

oft V

sual

++6

0
开发的
C/ S
系统,可以实现网络间的双人对战,并且可以提供多媒
体播放功能。系统的多媒体播放功能可 以播放MP
3
、WM
A
等主流格式的音乐。

本论文从基本 网络套节字开始入手
,
介绍了一些本系统相关的理论知识
,
随后详细介绍了< br>五子棋游戏
(
网络版)的开发过程。包括服务器端、客户端的
so
c< br>ket
编程,五子棋服
务器和客户端通信的实现
,
五子棋判断算法的实 现
,
主界面视图
,
多媒体播放以及定时器
等附加功能的实现。最后对 系统进行测试并对所做工作进行总结。


关键词


程序设计;
Fivec

e

s;MFC;

Ab

tra

t



A

stract

On

line
games

b

in


to
a
new


orm
of
e

t

rtai
nme
n

.
Unt

l

o

,
on-

ine ga

e


i


c

armi

g m
or
e

nd

more players.
As


he

developm

nt
of

ame

in

u
st
r

,

her


wi

l

e
mo

e

and
more

deve

o

e

s
join

in the gam


dev

lop

ent t
ea
m.
T

e

on

-l
ine

Bl
ac
k&
W

ite game was devel
ope
d by Microso
ft

V

s

al
C+
+6.
0 on Window


XP

p

atfo

m.

n

th
is


ame



wo

eople



n

play

t

e

game on lin

, and the

gam


al
so

pr

vides

mul

imedia play

r
fu
nctio

.

he th

sis

t
ar
t


ith in
tr
odu

tio


of n

twork

s

cket programming



he

develo

ment process

ng of the

o


-l
ine

lack

W

ite ga

e are in

rod

c

d

n
detail
a


fol

owed.

he
thesis
h
ave



f
ull

t

uch
on
server

nd


lient

ocke


pr
ogramm

n
g,

th



o

munica

ion
betwee


serve



n



l
ie
n


w

s
im

le

ented


the
algorith


of

the

iv
e-i
n-a-

o


game


the
mu
lti
me
dia playback

unc
tio
ns.


eyword


:

prog
ra
m; comp

ter



FC; Fivechess
--
--




--
--
1
绪论


娱乐是人类不可或缺的生活内容
,
目前市场上的游戏种类繁多读者将所学的语言应
用到 实际
,
用学习的
c

+
语言编程开发一个简易的计算机单机 游戏
,
即五子棋游戏。



1.1
课题背景







中国民 族原创网络游戏为中国网络游戏产业所做出了巨大贡献,民族原创网络
游戏已经成为产业发展的主导力量 。
同样在中国自主研发的民族原创网络游戏已经真正
成为中国游戏市场的主导力量。

网络游戏是通过信息网络传播和实现的互动娱乐形式,是一种网络与文化相结合的产
业。
近年来,
网络文化市场发展很快,
随着互联网的迅速普及、
宽带的接入社区和家庭,
我国网络游戏市场发展迅速并进入了一个高速增长期
,
并已经创造了较大的产值,带动
了相关产业的发展
,
对促进我国网络经济和娱乐业的发展、丰富互联网时代人民群众的
文化娱乐生活起到了积极作用。








1.2


课程设计目的

在程序设 计中,通过设计、编制、调试一个五子棋的程序,加深对语法及语义分析
原理的理解
,
并实现对命令语句的灵活应用。在程序设计中,可以用两种方法解决问题:
一是传统的结构化程序设计方 法
,
二是更先进的面向对象程序设计方法。

由于多个函数均需要访问某些数据
,
这些数据常被设计为全局变量。

而在面向对象程序设计中关键是如何将问题域中的实体
(
即日常所见的概念)抽取
出 来
,
作为C+
+
程序中的类,而属性与行为作为类的两类要素通常是必不可少 的,甚至
还应考虑类必须满足的约束。






--
--
2
设计方案简述




如下是描述整五子棋游戏的流程
,
开发一个五子棋游戏需要从两方面入手。一
是游戏规则,二是技术。其实
,
任何软件开发都是这两大类。根据项目的特点,将不相
关的功能分块份阶段进行。大致流程如下:
1.
画棋盘
;2
画棋子;
3
增加下棋制约条件;
4.
每下一步,判断输赢
;

.< br>调试运行。



2.


可行性分析


游戏设计已经成为现在社会的一种热门行业。五子棋是一种受 大众广泛喜爱的游

,
其规则简单,变化多端,非常富有趣味性和消遣性。这里设计和 实现了一个简单的
五子棋单机游戏。主要应用了
Visu

l
C+
+
编程来完成这个游戏的设计的。本文主要
介绍了本游戏开发环境
M

crosof



isual
C

+
6

0
,使用当前优秀的开发工具
VC++
编程。包含了五子棋程序的棋盘初始化、游戏规则、胜负判断。思路简单明了
,程序也较为简单。可以灵活运用一学过的
c++
知识来编写程序。



2

2
需求分析





近年来
,
随着网络的发展,游戏成为许多人关注的焦点。与传统的影音产业 一样
,
游戏产业也是娱乐行业的一个重要组成部分
,
基于数字化的网络游戏更 让人们找到了前
所未有的感受,并已经成为全球互联产业的热点。五子棋
,
亦称

连五子



串珠








五格

等等,
日文称之为

连珠


英文则称之为

Goba
ng”

Renju


“FI
R(
Five In a

Ro

)”
,是起源于中国古代的传统黑白棋种之一,是 一种体现民族特
色的休闲游戏
,
同时能较好的锻炼人的思维。具有广阔的开发前景。< br>








--
--


详细设计


.1

窗体设计

利用
MFC

ppWin

ard
生成五子棋游戏应用程序框架具体步骤如下:

(1)
执行
V C
程序,选择
File|Ne
w命令
,
弹出N
ew
对话框
.
单击
Projec

s
标签,转到
Pro jects
选项卡
,
选择
MFC

AppWiza

d(exe)
选项
,
然后在
Project
n

m
e文本框中输入
Five

h

ss
_
44
。L
a

a

ion
文本框是指 项目的本地路径。











--
--
(2)
单击按钮,弹出
MFC AppWin

ard_

te

1
对话框。选中单选按钮
,
如图所示。



(3
)单击完成按钮,则建立一个单文档应用框架。













--
--

3.
2游戏项目开发
(
四号字

黑体
)


3

2

1
棋盘设计

1.
在已 创建的工程
Fiveches

_44
中添加画棋盘的函数。
首先在
“Fi
veche

s_44.
h”


文件中定义一个用于显示棋盘的自定义公有函数:
void Chec

erboard(CDC*pDC);
然后在“
Fivech< br>e
ss
_44
V

ew

cpp
” 源文件中实现该函数。代码如下
:

voi


C

ivech

ss_44

ie

::Ch< br>e
cke

boa
rd
(CDC*pDC


{


fo
r(in


i=0;

<20;i++








//
连续画
2
0条竖线



{
ﻩﻩ


DC->M
ov
eTo( i

50,
0)
;




//
画笔移动到
(i*50,0)






DC->Li

eT

(

*5

,1000);


//

画笔从
(i*50

0
)点到
(i

50,10
00)




}






for(i=0;i<20;

++)














//
连续画
20
条横线



{



pDC->MoveT
o(
0,i*50);


p< br>D
C->
Li
neT

(
10
00,

*5

)




}
}
2.
在应用程序框架的
OnDr

w
()函数中调用该画棋 盘函数,将
pDC
对象作为实参传
递给Ch
ec

er
oard

)
函数
,
代码如下:







void CFivechess_44V
ew::O

Draw(CDC



DC)



CFi
ve
ches

_4
4Do
c* p
Do
c = Ge

Do

ument()




SSERT_V
ALID(pDoc);

/


TODO:
add

d
ra
w code for nati
ve

da

a

ere





Checkerboar

(
pDC
)






/
调用自定义的画键盘函数

}

3.
编译运行得到如下效果
:
一个空棋盘

--
--










3

2

2
放置棋子功能的开发

按照规划
,
棋子使用鼠标的左键和右键
(
分别用这两键来表示下棋的双方 )
来进行单机下

,
即是当用户单击左键时
,
下黑色棋子,
,用户单击右键时
,
下白色棋子。因此
,
必须为鼠
标添加鼠 标左键和鼠标右键单击的鼠标消息处理函数
,
步骤如下:


.右击C
FivechessV
iew类,调用添加消息处理函数的对话框,选择
A dd w

ndo

s
Mes
sa
geH
an
dler
2.添加消息处理函数< br>WM_LBUTTONDO

N
和W
M_RBUTT
ONDOW
N这两个消息
处理函数。然后点击
Edit Ex
is
i ti

g
退出对话框。并添加消息处理函数代码。如下图
所示:





添加鼠标左键和右键的消息处理函数:

(1)
.
左键消息

voi
d
CFi
v ech
e

s_44
Vi
ew::

n
L But
tonD
ow
n(

INT


Flag

,

--
--
Point

po
in
t



{// TODO: Add

y

ur mes
sa
ge ha
ndl
er cod



e

e
and
/or

c

l


de

a

lt

CBrush


brush =

ew CBr

s

(RGB(0,0,

)) ;//
定义黑色画刷

ﻩﻩ
C
DC
* pDC = t

is->G

t
DC(
);








/
/获取当前的图形设备指针

ﻩﻩ
pDC->SelectO
j
ect
(brush);












//
选中该黑色画刷



for

i

t i = 0




<

1

0




i+=5
0)




for(int j

= 0 j

< 1
00
0 j

=50)
ﻩﻩﻩ
{C

ect rec

(i,j

i+50,j+50);


















i

(rect< br>.
PtIn

ec

(poin
t)
)






















CPo

nt


e
mp
P
oi
nt

ﻩﻩ

t
em
pPoint


r



oint
()
;



pDC->Ellipse(te
mp
Po
in
t.x-20,te

pP

in

.y-20,

empP

i
nt
.x
+2
0,
t< br>empPoi

t.y+20);

ﻩﻩ



}



}




CVie
w

:

nLButton

ow

(nFl

gs, poi

t);
}
(
2)
.
右键消息



oid
CFi

e
che
ss_4 4View::O

RButto

Do

n(U
IN
T
nF
l

gs,
CPo

n


poi
nt)


{

// TODO: Add yo

r message handler
code

here an

/o


c

ll defaul







CB
ru

h


brus


=

n

w C

rus

(< br>RG

(255,255,

5

)

;

/
定义白色
画刷



CDC*

pDC

=

t

is-

GetDC()










//
获取当前的图形设备指针



pDC->
S e
l

ctObje

t

b

u

h);











//
选中该白色画刷

ﻩﻩ
fo

(int

i =


; i < 1000

i+=

0)


{



for
(i
n






0

;



< 100




j+=

0)










Rect
re
c

(i,j,

+5 0,j+5

);

/
每格都信定义一矩形



















if(rec
t .
P
tI
nRec

(poi

t
)


/
/如果鼠标点在该矩形内



















{

C

oint

empP
oi
nt

ﻩﻩ

tem

Poi
nt

= rec

.Ce

terPoint()

/ /
获取矩形中心
,
用于画棋子



ﻩﻩ

DC->Elli
ps
e(tempPo

nt.
x-< br>20,

empPo

n

.y-20,

empPoi
nt
.x+2

,te

pPoi< br>n
t.y+2
0)
;
ﻩﻩﻩ








}


}


CVi

w::

nRB
ut
to

Do

n

n

l
ag
s, point);
}
--
--
到此便将画棋盘和棋子的 代码编好,编译运行如下
:
左击鼠标左键画黑点
,
右击鼠标右键
画白 点




.
但程序至此尚有两点未解决:
其一
,
下棋子的约束条件,即双方按顺序一人下一次才可第二次落棋子。其二
,< br>同一方格
不能重复下棋子
;
解决第一个问题,添加以下代码
:

1



CFivechess_44V
ie< br>w
中添加一个公有的整形变量

int

Rig

tO

Let;


//定义保存左键或右键下棋的标记变量


2


构造函数将下棋的顺序初始化为左键先下












Fivechess_4 4View::CFivec

ess
_
44V

ew
)

















//

TODO:

dd con

t
ruc
ti

n code

ere




















RightO

Let=0;




//
初始化默认左键先下



}

3


修改鼠标的左键和右键的单击消息处理函数
,在画棋子之前判断轮到哪方下棋
,
代码如下:


左键代码
:
vo

d

Fi

e

he

s_

4Vie

::On L
Bu
tt

n

own(UINT

nFlags,
CPoint
point)

{

// T

DO:

Ad


yo
u


messag


handle


c

de here and/or
ca
l



efault



i

(Rig
htO
RLeft==0 )









--
--

CB

ush*

b
ru
s


= ne


CBrush(RGB
(0,0
,0

) ;

/
定义黑色画刷



C

C* pDC =

thi

-

GetDC()











/
获取当前的图形设备指针



pDC-

SelectObject

brush);












/
/选中该黑色画刷

ﻩﻩ
for(
int

i =

0 i


1

0


; i

=50)
ﻩﻩ






or(
in
t j

=

0 ;



< 1000 j+=

0)






ﻩﻩ

CRe
ct

rect(i,j
,i+
50,j+50)




















if(rect
.P
t

nRect

poi

t)






















{ CPo

n



e

p

o

nt




t
em
pP

int = r



P
oi
nt();




pDC-

Elli
pse
(
te< br>mpPo
in
t.x-20,t
em
pPoint.y-2

,t
empP
o

nt

x

2 0

te
mp
Point.

+20);






}

ﻩﻩ
}
ﻩﻩ
}










Right

RLef
t+
+;

//鼠标状态变化为
0



}





C

iew

:O
n
B

tto
nDo
w

(nFl

gs


point)


}


右键代码:

v

id CFivech
ss_4
4V
ie

::O

RButt
on D
own(
UI
NT

Flags, CPo

nt point)


{

/


T
OD
O: Add your mess

ge handler co

e h

re


n

/
or


a
ll

def

ult


f(

ightORLef

=

1)

{

C
Bru
s

*


ru
sh



ne



Brush(RGB(255,255,255)) //
定义白色画刷



CDC* pD


= th

s->

etDC();








//获取当前的图形设备指针



pD
C-
>

e
le
ct< br>O
b

ect

b
ru
sh);












/
选中该白色画刷

ﻩﻩ
fo
r(
in


i =





i < 1000


i+
=50




{



fo

(int j = 0

j <

1

00 j+

50)





ﻩﻩ



Re

t re

t(i,

,i+5
0,j+5
0);/
/每格都信定义一矩形



















if(



nRect

po

nt))


/
如果鼠标点在该矩形内



















{ CP

int t

mpPoint
ﻩﻩ


tem

P

int =


e
ct.
C

nterP

in
t(
); /
/获取矩形中心
,
用于画棋子






DC


Elli

s

( tem

Po


t.

-20,
em

Poi


.y-20

tempPo int.x+20,tempPoint.y+20)













}
ﻩﻩ


--
--










Ri
ghtORLeft- -;

/
鼠标状态变化为
1
,鼠标右键按下后,再次改变鼠标
状态








CVi

w


On

But
to< br>n
Down
(n

lags, poin

);
}






其二
,
解决第二个问题:

(1)



Fi

echess_44Vi

w

h
头文件中加入
3
行公有代码
,
并且在该头文件中包含
vect
or
的头文件
,
代码如下
:
#

i

cl

d

< vect

r



cl
as
s CF

v

chess_44View : p
ub
l

c CVi
ew

{

…………
;
s

d::vector
nt


chess

ec








boo



s L

cation
(C
P
oi
n


cp);


v

i


Loc
ation(CPoin


cp);











………
.

;












(
2)根据函数名在正确位置添加或修改以下函数


<1>
.添加实现放置棋子函数额判断放置许可函数
:

b

o


CFiv
ec
hess_44 V

e

::i

L

catio
n(
CP
oin
t cp


{

bool

isLoc

=

t

ue

for(

nt i = 0

; i < ch
es
s
Vec
.
si
z

(


; i++)



ﻩﻩ
if

c

.x
==

che

sVec[
i]
.


&& cp
.y

==

che
ss
V
ec
[i


y)


{




sLoc =

f
al
se
ﻩﻩ
}

}

r

t

rn

sL
oc

;
}
void CFiv
ec
h

ss_44Vi

w::L

cati o

(

Point c

)



chessVec.p

s

_back(cp);
}
--

孕妇每月食谱大全-伤仲永ppt


孕妇每月食谱大全-伤仲永ppt


孕妇每月食谱大全-伤仲永ppt


孕妇每月食谱大全-伤仲永ppt


孕妇每月食谱大全-伤仲永ppt


孕妇每月食谱大全-伤仲永ppt


孕妇每月食谱大全-伤仲永ppt


孕妇每月食谱大全-伤仲永ppt