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

温柔似野鬼°
692次浏览
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
i
s
u
al
C++
游戏开发 技术与实例
[M].
北京
:
人民邮电出
版社
,2
0
05
[
2
]
求是科技
,
张宏林.Visu
al C++ 6.0
程序设计与开发技术大全
[M]
.

北京
:
人民邮电出版社
,20
0
5
[3]
汪翔,
袁辉
.Visual
C++
实践与提高
(
网络编程篇
)[M]
.

北京:
中国铁道出版社
,20
0
1
[
4]
黄维通
.Vis
ual
C++
面向对象与可视化程序设计
[M].
北京
:
清华大学出版社,
2
003
[5]
谢希任
.
计算机网络
(
第4版)
[M]
.

北京
:
电子工业出版社
,2005
[6](
美
)W. Ric
h
ard Ste
ve
ns
.
TCP/
I
P
详解卷
1:
协议
[M
]
.
北京:机械工业出
版社
,2005
[
7
]
北京现 代富博科技有限公司
,
陈兵旗
,
孙明
.
北京:
Vis
u
a
l

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

[8]
张 静.
Windo
w
s
多媒体编程基础
[M].
北京
:
清化大学出版社
,2
0
05
[9
]
刘振安,
徐峰
.Wind
o
ws
实用编程指南[M
].
北京
:
人民邮电出版社
,1
9
95
[10
]刘长明
,
杨工明
.Vis
u
al
C
+
+
实践与提高
(
多媒体篇)
[M].
北京
:
中国铁道出版
社
,2
0
01




指导教师签字
:






--
--
























年

月

日

--
--
目

录



摘

要

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

II
A
b
st
r
act
…………………………………………… ……………………………………
.
.
.

II
1
绪论

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


…………………………………………………………………………
...
1
1.
2

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

1

2

设计方案简述

………………………………………
.
.
…………………
.. 2
2
.
1
可行性分析
………………………………………………
.
.
…………………………
.
2

2.
2

需求分析
…………………………………………………
.
.
…………………………
.2

3
详细设计
……………………………………………………………
..
………………
.
.< br>3
3
.
1窗体设计
………………………………………………
..
……………………………
..3

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

3
.2
.1棋牌设置
…………………………………………………………… ……………
..
…
5
3
.2
.
2
放置棋 子功能的开发
………………………………………………………………
.
.6
3.
3
.3
游戏获胜决断的开发
……………………………………………………
.
………
.12
3
.
2.
4游戏的调试与运行< br>…
………………………………………
.
……………
20

4
设计结果及分析
………………………………………………
..
… …
.
……………
2
2
4.1
程序的结果
……… ………………………………
.
………………………………
..22


4.2
结果分析
…………………………………………
.
.
… ……………………………
.
.
23


5
总

结

……
.
.
…………… ……………………………………
.
.………………………
24

参考文献

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






--
--




摘

要

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

X
P下使用
Micro
s
oft V
i
sual
C
++6
.
0
开发的
C/ S
系统,可以实现网络间的双人对战,并且可以提供多媒
体播放功能。系统的多媒体播放功能可 以播放MP
3
、WM
A
等主流格式的音乐。

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


关键词


程序设计;
Fivec
h
e
s
s;MFC;

Ab
s
tra
c
t



A
b
stract

On
-
line
games

b
r
in
g

to
a
new

f
orm
of
e
n
t
e
rtai
nme
n
t
.
Unt
i
l
n
o
w
,
on-
l
ine ga
m
e
s

i
s

c
h
armi
n
g m
or
e
a
nd

more players.
As

t
he

developm
e
nt
of
g
ame

in
d
u
st
r
y
,
t
her
e

wi
l
l
b
e
mo
r
e

and
more

deve
l
o
p
e
r
s
join

in the gam
e

dev
e
lop
m
ent t
ea
m.
T
h
e

on

-l
ine

Bl
ac
k&
W
h
ite game was devel
ope
d by Microso
ft

V
i
s
u
al
C+
+6.
0 on Window
s

XP

p
l
atfo
r
m.
I
n

th
is

g
ame
,

t
wo
p
eople

c
a
n

play

t
h
e

game on lin
e
, and the

gam
e

al
so

pr
o
vides

mul
t
imedia play
e
r
fu
nctio
n
.
T
he th
e
sis
s
t
ar
t

w
ith in
tr
odu
c
tio
n

of n
e
twork

s
o
cket programming
,

t
he

develo
p
ment process
i
ng of the

o
n

-l
ine
B
lack
&
W
h
ite ga
m
e are in
t
rod
u
c
e
d
i
n
detail
a
s

fol
l
owed.
T
he
thesis
h
ave

a

f
ull

t
o
uch
on
server
a
nd

c
lient
s
ocke
t

pr
ogramm
i
n
g,

th
e

c
o
m
munica
t
ion
betwee
n

serve
r

a
n
d

c
l
ie
n
t

w
a
s
im
p
le
m
ented
,

the
algorith
m

of

the
f
iv
e-i
n-a-
r
o
w

game
,

the
mu
lti
me
dia playback
f
unc
tio
ns.

K
eyword
s

:

prog
ra
m; comp
u
ter
;

M
FC; Fivechess
--
--




--
--
1
绪论


娱乐是人类不可或缺的生活内容
,
目前市场上的游戏种类繁多读者将所学的语言应
用到 实际
,
用学习的
c
+
+
语言编程开发一个简易的计算机单机 游戏
,
即五子棋游戏。



1.1
课题背景







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

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








1.2


课程设计目的

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

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

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






--
--
2
设计方案简述




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



2.
1

可行性分析


游戏设计已经成为现在社会的一种热门行业。五子棋是一种受 大众广泛喜爱的游
戏
,
其规则简单,变化多端,非常富有趣味性和消遣性。这里设计和 实现了一个简单的
五子棋单机游戏。主要应用了
Visu
a
l
C+
+
编程来完成这个游戏的设计的。本文主要
介绍了本游戏开发环境
M
i
crosof
t

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



2
.
2
需求分析





近年来
,
随着网络的发展,游戏成为许多人关注的焦点。与传统的影音产业 一样
,
游戏产业也是娱乐行业的一个重要组成部分
,
基于数字化的网络游戏更 让人们找到了前
所未有的感受,并已经成为全球互联产业的热点。五子棋
,
亦称
“
连五子
”
、
“
串珠
”
、
“
五
目
”
、
“
五格
”
等等,
日文称之为
“
连珠
”
,
英文则称之为
“
Goba
ng”或
“
Renju
”
或
“FI
R(
Five In a

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








--
--
3

详细设计

3
.1

窗体设计

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

(1)
执行
V C
程序,选择
File|Ne
w命令
,
弹出N
ew
对话框
.
单击
Projec
t
s
标签,转到
Pro jects
选项卡
,
选择
MFC

AppWiza
r
d(exe)
选项
,
然后在
Project
n
a
m
e文本框中输入
Five
c
h
e
ss
_
44
。L
a
c
a
t
ion
文本框是指 项目的本地路径。











--
--
(2)
单击按钮,弹出
MFC AppWin
z
ard_
S
te
p
1
对话框。选中单选按钮
,
如图所示。



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













--
--

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

黑体
)


3
.
2
.
1
棋盘设计

1.
在已 创建的工程
Fiveches
s
_44
中添加画棋盘的函数。
首先在
“Fi
veche
s
s_44.
h”

头
文件中定义一个用于显示棋盘的自定义公有函数:
void Chec
k
erboard(CDC*pDC);
然后在“
Fivech< br>e
ss
_44
V
i
ew
.
cpp
” 源文件中实现该函数。代码如下
:

voi
d

C
F
ivech
e
ss_44
V
ie
w
::Ch< br>e
cke
r
boa
rd
(CDC*pDC
)

{
ﻩ

fo
r(in
t

i=0;
i
<20;i++
)







//
连续画
2
0条竖线



{
ﻩﻩ

p
DC->M
ov
eTo( i
*
50,
0)
;




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




p
DC->Li
n
eT
o
(
i
*5
0
,1000);


//

画笔从
(i*50
,
0
)点到
(i
*
50,10
00)
点

ﻩ

}






for(i=0;i<20;
i
++)














//
连续画
20
条横线



{
ﻩ


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

ﻩ
p< br>D
C->
Li
neT
o
(
10
00,
i
*5
0
)
;



}
}
2.
在应用程序框架的
OnDr
a
w
()函数中调用该画棋 盘函数,将
pDC
对象作为实参传
递给Ch
ec
k
erb
oard
(
)
函数
,
代码如下:







void CFivechess_44Vi
ew::O
n
Draw(CDC
*

p
DC)
{

ﻩ
CFi
ve
ches
s
_4
4Do
c* p
Do
c = Ge
t
Do
c
ument()
;


A
SSERT_V
ALID(pDoc);

/
/

TODO:
add

d
ra
w code for nati
ve

da
t
a
h
ere





Checkerboar
d
(
pDC
)
;




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

}

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

--
--










3
.
2
.
2
放置棋子功能的开发

按照规划
,
棋子使用鼠标的左键和右键
(
分别用这两键来表示下棋的双方 )
来进行单机下
棋
,
即是当用户单击左键时
,
下黑色棋子,
,用户单击右键时
,
下白色棋子。因此
,
必须为鼠
标添加鼠 标左键和鼠标右键单击的鼠标消息处理函数
,
步骤如下:

1
.右击C
FivechessV
iew类,调用添加消息处理函数的对话框,选择
A dd w
i
ndo
w
s
Mes
sa
geH
an
dler
2.添加消息处理函数< br>WM_LBUTTONDO
W
N
和W
M_RBUTT
ONDOW
N这两个消息
处理函数。然后点击
Edit Ex
is
i ti
n
g
退出对话框。并添加消息处理函数代码。如下图
所示:





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

(1)
.
左键消息

voi
d
CFi
v ech
e
s
s_44
Vi
ew::
O
n
L But
tonD
ow
n(
U
INT

n
Flag
s
,
C
--
--
Point

po
in
t
)


{// TODO: Add

y
o
ur mes
sa
ge ha
ndl
er cod
e

h
e
r
e
and
/or

c
a
l
l

de
f
a
u
lt
ﻩ
CBrush
*

brush =
n
ew CBr
u
s
h
(RGB(0,0,
0
)) ;//
定义黑色画刷

ﻩﻩ
C
DC
* pDC = t
h
is->G
e
t
DC(
);








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

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












//
选中该黑色画刷


ﻩ
for
(
i
n
t i = 0
;

i

<

1
0
0
0

;

i+=5
0)



{
for(int j

= 0 j

< 1
00
0 j
+
=50)
ﻩﻩﻩ
{C
R
ect rec
t
(i,j
,
i+50,j+50);


















i
f
(rect< br>.
PtIn
R
ec
t
(poin
t)
)




















{

CPo
i
nt

t
e
mp
P
oi
nt

ﻩﻩ

t
em
pPoint
=

r
e

P
oint
()
;

ﻩ

pDC->Ellipse(te
mp
Po
in
t.x-20,te
m
pP
o
in
t
.y-20,
t
empP
o
i
nt
.x
+2
0,
t< br>empPoi
n
t.y+20);

ﻩﻩ



}
ﻩ

ﻩ
}


}

CVie
w
:
:
O
nLButton
D
ow
n
(nFl
a
gs, poi
n
t);
}
(
2)
.
右键消息


v
oid
CFi
v
e
che
ss_4 4View::O
n
RButto
n
Do
w
n(U
IN
T
nF
l
a
gs,
CPo
i
n
t

poi
nt)


{

// TODO: Add yo
u
r message handler
code

here an
d
/o
r

c
a
ll defaul
t






CB
ru
s
h
*

brus
h

=

n
e
w C
B
rus
h
(< br>RG
B
(255,255,
2
5
5
)
)
;
/
/
定义白色
画刷

ﻩ

CDC*

pDC

=

t
h
is-
>
GetDC()
;









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

ﻩ

pDC->
S e
l
e
ctObje
c
t
(
b
r
u
s
h);











//
选中该白色画刷

ﻩﻩ
fo
r
(int

i =
0

; i < 1000

i+=
5
0)


{



for
(i
n
t

j

=

0

;

j

< 100
0

;

j+=
5
0)



{





C
Rect
re
c
t
(i,j,
i
+5 0,j+5
0
);
/
/
每格都信定义一矩形



















if(rec
t .
P
tI
nRec
t
(poi
n
t
))


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



















{

C
P
oint
t
empP
oi
nt

ﻩﻩ

tem
p
Poi
nt

= rec
t
.Ce
n
terPoint()
;
/ /
获取矩形中心
,
用于画棋子



ﻩﻩ
p
DC->Elli
ps
e(tempPo
i
nt.
x-< br>20,
t
empPo
i
n
t
.y-20,
t
empPoi
nt
.x+2
0
,te
m
pPoi< br>n
t.y+2
0)
;
ﻩﻩﻩ



}

ﻩ

ﻩ
}


}

ﻩ
CVi
e
w::
O
nRB
ut
to
n
Do
w
n
(
n
F
l
ag
s, point);
}
--
--
到此便将画棋盘和棋子的 代码编好,编译运行如下
:
左击鼠标左键画黑点
,
右击鼠标右键
画白 点



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

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

int

Rig
h
tO
R
Let;


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

(
2
)

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











C
Fivechess_4 4View::CFivec
h
ess
_
44V
i
ew(
)
{
















//

TODO:
a
dd con
s
t
ruc
ti
o
n code
h
ere




















RightO
R
Let=0;




//
初始化默认左键先下



}
(
3
)

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


左键代码
:
vo
i
d
C
Fi
v
e
c
he
s
s_
4
4Vie
w
::On L
Bu
tt
o
n
D
own(UINT

nFlags,
CPoint
point)

{

// T
O
DO:

Ad
d

yo
u
r

messag
e

handle
r

c
o
de here and/or
ca
l
l

d
efault



i
f
(Rig
htO
RLeft==0 )



{





--
--
ﻩ
CB
r
ush*

b
ru
s
h

= ne
w

CBrush(RGB
(0,0
,0
)
) ;
/
/
定义黑色画刷

ﻩ

C
D
C* pDC =

thi
s
-
>
GetDC()
;









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



pDC-
>
SelectObject
(
brush);












/
/选中该黑色画刷

ﻩﻩ
for(
int

i =

0 i
<

1
0
0
0

; i
+
=50)
ﻩﻩ
{



ﻩ
f
or(
in
t j

=

0 ;

j

< 1000 j+=
5
0)

ﻩ

{


ﻩﻩ

CRe
ct

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



















if(rect
.P
t
I
nRect
(
poi
n
t)
)





















{ CPo
i
n
t

t
e
m
p
P
o
i
nt
ﻩ


ﻩ
t
em
pP
o
int = r
e

r
P
oi
nt();


ﻩ

pDC-
>
Elli
pse
(
te< br>mpPo
in
t.x-20,t
em
pPoint.y-2
0
,t
empP
o
i
nt
.
x
+
2 0
,
te
mp
Point.
y
+20);
ﻩ





}

ﻩﻩ
}
ﻩﻩ
}










Right
O
RLef
t+
+;

//鼠标状态变化为
0



}





C
V
iew
:
:O
nL
B
u
tto
nDo
w
n
(nFl
a
gs
,

point)
;

}


右键代码:

v
o
id CFivech
ess_4
4V
ie
w
::O
n
RButt
on D
own(
UI
NT
n
Flags, CPo
i
nt point)


{
ﻩ
/
/

T
OD
O: Add your mess
a
ge handler co
d
e h
e
re

a
n
d
/
or

c
a
ll

def
a
ult

i
f(
R
ightORLef
t
=
=
1)

{

C
Bru
s
h
*

b
ru
sh

=

ne
w

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


ﻩ
CDC* pD
C

= th
i
s->
G
etDC();








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

ﻩ

pD
C-
>
S
e
le
ct< br>O
b
j
ect
(
b
ru
sh);











/
/
选中该白色画刷

ﻩﻩ
fo
r(
in
t

i =

0

;

i < 1000
;

i+
=50
)



{
ﻩ

ﻩ
fo
r
(int j = 0

j <

1
0
00 j+
=
50)
ﻩ

ﻩ
{

ﻩﻩ


C
Re
c
t re
c
t(i,
j
,i+5
0,j+5
0);/
/每格都信定义一矩形



















if(
r

I
nRect
(
po
i
nt))

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



















{ CP
o
int t
e
mpPoint
ﻩﻩ

ﻩ
tem
p
P
o
int =

r
e
ct.
C
e
nterP
o
in
t(
); /
/获取矩形中心
,
用于画棋子



ﻩ
ﻩ
p
DC
-
>
Elli
p
s
e
( tem
p
Po
i
n
t.
x
-20,
tem
p
Poi
n
t
.y-20
,
tempPo int.x+20,tempPoint.y+20)
;

ﻩ





}




}
ﻩﻩ
}

--
--










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

ﻩ




}

CVi
e
w
:
:
On
R
But
to< br>n
Down
(n
F
lags, poin
t
);
}






其二
,
解决第二个问题:

(1)


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

i
n
cl
u
d
e
< vect
o
r
>


cl
as
s CF
i
v
e
chess_44View : p
ub
l
i
c CVi
ew

{

…………
;
s
t
d::vectori
nt
>

chess
V
ec








boo
l

i
s L
o
cation
(C
P
oi
n
t

cp);
ﻩ

v
o
i
d

Loc
ation(CPoin
t

cp);











………
.
.
;
}











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


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

b
o
o
l

CFiv
ec
hess_44 V
i
e
w
::i
s
L
o
catio
n(
CP
oin
t cp
)

{

bool

isLoc

=

t
r
ue

for(
i
nt i = 0

; i < ch
es
s
Vec
.
si
z
e
(
)

; i++)

{

ﻩﻩ
if
(
c
p
.x
==

che
s
sVec[
i]
.
x

&& cp
.y

==

che
ss
V
ec
[i
]
.
y)

ﻩ
{
ﻩ

ﻩ
i
sLoc =

f
al
se
ﻩﻩ
}
ﻩ
}
ﻩ
r
e
t
u
rn
i
sL
oc

;
}
void CFiv
ec
h
e
ss_44Vi
e
w::L
o
cati o
n
(
C
Point c
p
)
{


chessVec.p
u
s
h
_back(cp);
}
--

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


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


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


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


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


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


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


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