第一篇:24点数学游戏可打印范文
至 9 的四个数字算24 1)1118(1+1+1)*8 2)1126(1+1+2)*6 3)1127(1+2)*(1+7)4)1128(1+1*2)*8 5)1129(1+2)*(9-1)6)1134 4*(1+1)*3 7)1135(1+3)*(1+5)8)1136(1+1*3)*6 9)1137 3*(1+1*7)10)1138(1-1+3)*8 11)1139(1+1)*(3+9)12)1144 4*(1+1+4)13)1145 4*(1+1*5)14)1146(1-1+4)*6 15)1147 1*4*(7-1)16)1148(1+1)*(4+8)17)1149(4-1)*(9-1)18)1155(5-1)*(1+5)19)1156(1*5-1)*6 20)1157(1+1)*(5+7)21)1158(5-(1+1))*8 22)1166(1+1)*(6+6)23)1168 6/(1+1)*8 24)1169 6+(1+1)*9 25)1188 8+(1+1)*8 26)1224 4*2*(1+2)27)1225(2+2)*(1+5)28)1226(1+2)*(2+6)29)1227(2+2)*(7-1)30)1228(2-1+2)*8 31)1229 2*(1+2+9)32)1233 3*2*(1+3)33)1234 4*(1+2+3)34)1235(1+2)*(3+5)35)1236 3*(1*2+6)36)1237 1+2+3*7 37)1238 2*(1+3+8)38)1239 1*2*(3+9)39)1244(1+2)*(4+4)40)1245 4*(2-1+5)41)1246(2-1)*4*6 42)1247 2*(1+4+7)43)1248 1*2*(4+8)44)1249 4+2*(1+9)45)1255 1+5*5-2 46)1256(1+5-2)*6 47)1257 1*2*(5+7)48)1258(1+5)/2*8 49)1259 9+(1+2)*5 50)1266 6+(1+2)*6 51)1267(1+7)/2*6 52)1268 1*6/2*8 53)1269 6+1*2*9 54)1277(7*7-1)/2 55)1278 1+7+2*8 56)1279 1+9+2*7 57)1288 8+1*2*8 58)1289 9+2*8-1 59)1333(1+3)*(3+3)60)1334 4*(1*3+3)61)1335 1*3*(3+5)62)1336 3+3*(1+6)63)1337 1*3+3*7 64)1338 3*(1+8)-3 65)1339(1+3)*(9-3)66)1344 1*3*(4+4)67)1345 1+3+4*5 * 68)1346 6/(1-3/4)69)1347(1+3)*7-4 70)1348 8+(1+3)*4 71)1349 1+3*9-4 72)1356 1+5+3*6 73)1357(7-3)*(1+5)74)1358 1+8+3*5 75)1359 9+1*3*5 76)1366 6+1*3*6 77)1367(7-3)*1*6 78)1368(1+6/3)*8 79)1369 3*(1+9)-6 80)1377(7-3)*(7-1)81)1378(7-(1+3))*8 82)1379(1+7)*9/3 83)1388(1+3)*8-8 84)1389 1*8*9/3 85)1399(9-1)*9/3 86)1444 4+4*(1+4)87)1445 1*4+4*5 88)1446 4*(1+6)-4 89)1447 1+7+4*4 90)1448 8+1*4*4 91)1449 4*(1+9-4)92)1455 4+(5-1)*5 93)1456 4/(1-5/6)94)1457 1+4*7-5 95)1458(8-4)*(1+5)96)1459 9+(4-1)*5 97)1466(1+4)*6-6 98)1467(1+7-4)*6 99)1468(1+6-4)*8 100)1469(9-(1+4))*6 101)1477(7-4)*(1+7)102)1478 4*(1+7)-8 103)1479(7-4)*(9-1)104)1488 1*4*8-8 105)1489 1+4*8-9 106)1555(5-1/5)*5 107)1556 5*(1+5)-6 108)1559(9-5)*(1+5)109)1566 1*5*6-6 110)1567 1+5*6-7 111)1568(1+8-5)*6 112)1569(9-5)*1*6 113)1578(1+7-5)*8 114)1579(9-5)*(7-1)115)1588(1*8-5)*8 116)1589(8-5)*(9-1)117)1599 9+1+5+9 118)1666(6-1)*6-6 119)1668 6/(1-6/8)120)1669(1+9-6)*6 121)1679(9-6)*(1+7)122)1688(1+8-6)*8 123)1689 9+1+6+8 124)1699 9+1*6+9 125)1779 9+7+1+7 126)1788 8+1+7+8 127)1789 9+1*7+8 128)1799 9+7-1+9 129)1888 8+1*8+8 130)1889 9+8-1+8 131)2223 3*2*(2+2)132)2224 4*(2+2+2)133)2225 2*(2+2*5)134)2227 2*(2*7-2)135)2228(2/2+2)*8 136)2229 2+2*(2+9)137)2233(2+2)*(3+3)138)2234 3*(2+2+4)139)2235 3*(2*5-2)140)2236 2*(2*3+6)141)2237 2*(2+3+7)142)2238 2+2*(3+8)143)2239(2+2)*(9-3)144)2244 2*(4+2*4)145)2245 2+2+4*5 146)2246(2-2+4)*6 147)2247 2+2*(4+7)148)2248 8+(2+2)*4 149)2249 2+4+2*9 150)2255 2*(5+2+5)151)2256 2+2*(5+6)152)2257 2*5+2*7 153)2258 2*(5+8)-2 154)2259 2*(5-2+9)155)2266(2+6)/2*6 156)2267 6+2*(2+7)157)2268 8+2*(2+6)158)2269 2*(2*9-6)159)2277 2*(7-2+7)160)2278 2+8+2*7 161)2288(2+2)*8-8 162)2289 8+2*9-2 163)2333 3*(3+2+3)164)2335 2*(3*5-3)165)2336 2*(3+3+6)166)2337(7-3)*2*3 167)2338(3/3+2)*8 168)2339 9+3*(2+3)169)2344 4+4*(2+3)170)2345 2*(5+3+4)171)2346 2+4+3*6 172)2347 4+2*(3+7)173)2348(8-4)*2*3 174)2349 2*4*9/3 175)2355 2+5*5-3 176)2356 5*2*3-6 177)2357 2+7+3*5 178)2358 8+2*(3+5)179)2359 2+3*9-5 180)2366(2+3)*6-6 181)2367 3*(2*7-6)182)2368 3*(2+8)-6 183)2369 9+3+2*6 184)2377 7+3+2*7 185)2378(2+7)/3*8 186)2379 3*(7-2)+9 187)2388 3*(2*8-8)188)2389 8/2*(9-3)189)2399 9+2*3+9 190)2444 2*(4+4+4)191)2445 4*(2+5)-4 192)2446 2+6+4*4 193)2447(7-4)*2*4 194)2448(4/4+2)*8 195)2449 4*(9-2)-4 196)2455 4+2*(5+5)197)2456 5*(2+4)-6 198)2457(4-2)*(5+7)199)2458(2*4-5)*8 200)2459(9-5)*(2+4)201)2466(2+6-4)*6 202)2467 2+4*7-6 203)2468 4*(2+6)-8 204)2469(9-6)*2*4 205)2477 2*(7+7)-4 206)2478 4*(2*7-8)207)2479 9+7+2*4 208)2488 8+2*4+8 209)2489(9-(2+4))*8 210)2499 9+2+4+9 211)2557 5+5+2*7 212)2558(5/5+2)*8 213)2559 9+5+2*5 214)2566(2*5-6)*6 215)2567 7+5+2*6 216)2568 2+5*6-8 217)2569 9+5*6/2 218)2577 7+7+2*5 219)2578(2*5-7)*8 220)2579 5*7-(2+9)221)2588 5*8-2*8 222)2589 9+2+5+8 223)2666 6+6+2*6 224)2667(6+6*7)/2 225)2668(6/6+2)*8 226)2669(9-6)*(2+6)227)2678(2+7-6)*8 228)2679 9+7+2+6 229)2688 8+2+6+8 230)2689(2*6-9)*8 231)2699 2*(9-6+9)232)2778 8+7+2+7 233)2788(2+8-7)*8 234)2789 2*(7+9)-8 235)2888(8/8+2)*8 236)2889(2+9-8)*8 237)2899(9/9+2)*8 238)3333 3*3*3-3 239)3334 3+3*(3+4)240)3335 3*3+3*5 241)3336 3+3+3*6 242)3337 3*(3/3+7)243)3338(3+3-3)*8 244)3339 3*(9-3/3)245)3344 3*(3*4-4)246)3345 4*(3/3+5)247)3346(3-3+4)*6 248)3347 3*(4-3+7)249)3348(8-4)*(3+3)250)3349 3+9+3*4 251)3355 5*5-3/3 252)3356 3+6+3*5 253)3357 3*(3*5-7)254)3359(9-5)*(3+3)255)3366 3*(6/3+6)256)3367 3*(3+7)-6 257)3368(3*3-6)*8 258)3369 9+6+3*3 *259)3377(3/7+3)*7 260)3378 8+7+3*3 261)3379 3+7*9/3 *262)3388 8/(3-8/3)263)3389 3*(3+8)-9 264)3399 9+3+3+9 265)3444 4*(3+4)-4 266)3445 3+5+4*4 267)3446(4/4+3)*6 268)3447 3*(4/4+7)269)3448(3+4-4)*8 270)3449 3*(9-4/4)271)3455 5+4+3*5 272)3456(3+5-4)*6 273)3457 7+5+3*4 274)3458 4*(3+5)-8 275)3459 3*(4+9-5)276)3466 6+6+3*4 277)3468(3*4-8)*6 278)3469 4*(3+9-6)279)3477 3+4*7-7 280)3478 8+(7-3)*4 281)3479 3*(4+7)-9 282)3489 9+3+4+8 283)3499 9+3*(9-4)284)3556(5/5+3)*6 285)3557 3*(5/5+7)286)3558(3+5-5)*8 287)3559 3*(9-5/5)288)3566(3+6-5)*6 289)3567 3*(6-5+7)290)3568 3*(6-5)*8 291)3569 3+5*6-9 292)3578 8+3*7-5 293)3579 9+7+3+5 294)3588 8+3+5+8 295)3589 5+3*9-8 296)3599 9+5*9/3 297)3666(6/6+3)*6 298)3667 3*(6/6+7)299)3668(3+6-6)*8 300)3669 9+6+3+6 301)3677 3*(7-6+7)302)3678 8+7+3+6 303)3679 3*(6+9-7)304)3688(8/8+3)*6 305)3689(3+9-8)*6 306)3699 6+3*9-9 307)3777 7+7+3+7 308)3778(3+7-7)*8 309)3779 3*(9-7/7)310)3788 3*(8/8+7)311)3789 3*(7+9-8)312)3799 3*(9/9+7)313)3888(3+8-8)*8 314)3889(9-8)*3*8 315)3899 9+3*8-9 316)3999 3*(9-9/9)317)4444 4+4+4*4 318)4445 4*(4/4+5)319)4446(4+4-4)*6 320)4447(7-4)*(4+4)321)4448 4*(4+4)-8 322)4449 4+4*(9-4)323)4455 4*(5-4+5)324)4456 4*(5-4)*6 325)4457 4*(4+7-5)326)4458(4+4-5)*8 327)4468 4*(4+8-6)328)4469(9-6)*(4+4)329)4477(4-4/7)*7 330)4478 4+4*7-8 331)4479 9+7+4+4 332)4488 8+4+4+8 333)4489 4*9-(4+8)334)4555 4+5*5-5 335)4556(4+5-5)*6 336)4557 4*(7-5/5)337)4558(4-5/5)*8 338)4559 9+4*5-5 339)4566 4*(6/6+5)340)4567 4*(5+7-6)341)4568(4+5-6)*8 342)4569 9+6+4+5 343)4577 4*(7/7+5)344)4578 8+7+4+5 345)4579 5+4*7-9 346)4588 4*(8/8+5)347)4589 4*(5+9-8)348)4599 4*(9/9+5)349)4666(4+6-6)*6 350)4667(7-6)*4*6 351)4668 8+6+4+6 352)4669 4*9-(6+6)353)4677 7+7+4+6 354)4678(4+6-7)*8 355)4679(7+9)/4*6 356)4688 8+4*6-8 357)4689(9-8)*4*6 358)4699 9+4*6-9 359)4777 4*(7-7/7)360)4778(4-7/7)*8 361)4788(4+7-8)*8 362)4789 4*(7+8-9)363)4799 4*(7-9/9)364)4888(4-8/8)*8 365)4889(4+8-9)*8 366)4899(4-9/9)*8 367)5555 5*5-5/5 368)5556 5+5*5-6 369)5559 9+5+5+5 370)5566(5+5-6)*6 371)5567 6+5*5-7 372)5568 8+6+5+5 373)5577 7+7+5+5 374)5578(5+5-7)*8 375)5588 5*5-8/8 376)5589 8+5*5-9 377)5599 5*5-9/9 378)5666(5-6/6)*6 379)5667 7+6+5+6 380)5668 6+(8-5)*6 381)5669 6*9-5*6 382)5677(5-7/7)*6 383)5678(5+7-8)*6 384)5679 6+(7-5)*9 385)5688(5+6-8)*8 386)5689(5+8-9)*6 387)5699 9+(9-6)*5 388)5779(9-7)*(5+7)389)5788 8+(7-5)*8 390)5789(5+7-9)*8 391)5888 5*8-(8+8)392)5889(9-5)*8-8 393)6666 6+6+6+6 394)6668(6+6-8)*6 395)6669 6*6*6/9 396)6679(6+7-9)*6 397)6688 6/(8-6)*8 398)6689(6+6-9)*8 399)6789 6*8/(9-7)400)6799 6*7-(9+9)401)6888 8+(8-6)*8 402)6889 9*(8+8)/6 403)6899(9+9)/6*8 404)7889 8+(9-7)*8
两位数乘两位数速算口诀
1.十几乘十几:
口诀:头乘头,尾加尾,尾乘尾。
例:12×14=? 解:1×1=1 2+4=6
2×4=8 12×14=168
注:个位相乘,不够两位数要用0占位。
2.头相同,尾互补(“首同末和十”即十位完全相同,个位相加之和刚好等于10): 口诀:
一个头加1后,头乘头,尾乘尾。
例:23×27=? 解:2+1=3
2×3=6
3×7=21 23×27=621
注:个位相乘,不够两位数要用0占位。
3.头互补,尾相同(“末同首和十”个位数完全相同,十位数相加之和刚好为10): 口诀:头乘头加尾,尾乘尾。例:45×65=? 解:4×6+5=29
5×5=25 45×65=2925 注:两数相同的各位数之积为得数的后两位数,不足10的,在十位上补0
4.第一个乘数互补,另一个乘数数字相同: 口诀:
一个头加1后,头乘头,尾乘尾。例:37×44=? 解:3+1=4 4×4=16 7×4=28 37×44=1628
注:个位相乘,不够两位数要用0占位。
5.几十一乘几十一:
口诀:头乘头,头加头,尾乘尾。例:21×41=? 解:2×4=8 2+4=6 1×1=1 21×41=861
6.11乘任意数: 口诀:
首尾不动下落,中间之和下拉。例:11×23125=?
解:2+3=5
3+1=4 1+2=3 2+5=7
2和5分别在首尾 11×23125=254375 注:和满十要进一。7.十几乘任意数: 口诀:
第二乘数首位不动向下落,第一因数的个位乘以第二因数后面每一个数字,加下一位数,再向下落。例:13×326=? 解:13个位是3 3×3+2=11 3×2+6=12 3×6=18 13×326=4238
注:和满十要进一。
第二篇:delphi24点游戏
第3章 “速算24”扑克游戏--单元、异常、逻辑
3.1 “速算24”扑克游戏效果说明
“速算24”是一个考察心算能力、有助于开发智力的扑克游戏。在给出4张扑克牌之后,要求应用这些扑克牌数字做数学运算,迅速构造出一个数学表达式,得出结果24。这个游戏的关键在于迅速判断用户输入的表达式是否正确,并做出相应的反馈,告诉用户是算对了还是算错了。游戏的初始界面如图3.1所示。
图3.1 游戏的初始界面
当用户单击“开始”按钮时,系统开始发牌,随机发出4张牌,如图3.2所示为随机开始的一局游戏,给出的4张纸牌分别为“9”,“8”,“9”,“2”。在文本框中输入运算表达式,比如,输入“8*(2+(9-9))”,单击“计算”按钮,系统会出现提示框,显示“您输入的表达式的计算结果为16!”,告诉你该表达式的结果不是“24”,如图3.3所示。单击“确定”按钮,再次在文本框中输入表达式,比如“8*(2+(9/9))”,单击“计算”按钮,系统会出现提示框,显示“您真行,我服了您!”,表明运算正确,如图3.4所示。
图3.2 系统随机发4张纸牌
图3.3 运算式不正确
图3.4 运算式正确
这个游戏具体的规则如下:
(1)单击“开始”按钮,游戏开始,系统将随机发牌。
(2)请迅速在文本框中输入运算表达式,然后单击“计算”按钮。
(3)这时系统会提示您的运算是对了还是错了,在弹出的对话框中单击“OK”按钮,再次输入新的运算表达式,重复上一步,直到您的运算表达式结果正确,这时系统会恭喜您!
(4)如果结果错了还想继续或者中途想计算另一局扑克牌,就单击“重新开始”按钮,得到新一局扑克牌进行游戏。
下面,我们开始循序渐进地创建这个小游戏。在最开始,游戏的界面和效果都会非常简单,在后面我们会逐渐地完善它。
第3章 “速算24”扑克游戏--单元、异常、逻辑
3.2 生成和建立程序(1)在程序中用到了Image组件,用于放置图片。还用到了Timer组件,用于计算用户操作时间。下面我们来生成游戏的基本框架。
3.2.1 Image组件
Image组件在Additional页上,用来在窗口中显示一幅图片。它拥有如下几个主要属性: 1.Picture属性
可以在picture属性中调入图像文件。Delphi支持多种图像格式,如位图(.BMP)、图标(.ICO)、图元(.WFM)、动画光标(.ANI)、JPEG图片(.JPG、.JPEG)等。
2.AutoSize属性
当AutoSize为True时,Image组件将根据它所包含的图像的大小来调整自身的大小;当AutoSize为False时,不论图像有多大,组件将保持设计时的大小。如果组件比图像小,那么只有一部分图像是可见的。
3.Stretch属性
当Stretch为True时,位图图像将根据组件的大小调整自身的大小,当组件大小改变时,上述三种文件也做相应变化。Stretch属性对图标没有作用。
上述的AutoSize和Stretch属性决定了图像在窗口中的显示尺寸。
图3.5演示的3个Image分别为:AutoSize为True,AutoSize为False,Stretch为True的情形。可以看到,Image的原始尺寸比图片宽,矮,在上面的属性设置下,就会有不同的显示效果。
图3.5 AutoSize和Stretch的设置 3.2.2 Timer组件
在Delphi中,组件分可视组件和非可视组件。可视组件是指那些在运行期间仍然能显示的组件,例如Label,Button,Image组件等。非可视组件是指那些在程序界面设计期间可见,而在程序运行时不可见的组件,例如在System页上的Timer组件。
Timer组件能够有规律地触发OnTimer事件,发送信息给应用程序,它是编制应用程序时最为重要的组件之一。
1.Timer组件的属性
Enabled属性表示Timer是打开还是关闭。用Interval属性设置两个OnTimer事件间的间隔,单位是毫秒。将间隔设置为0相当于关闭计时器,Interval是Cardinal类型的,最大值可到4294967295,当然程序中一般不会把Interval设成很大的值。2.Timer组件的使用
Timer是独立的对象,在启动与Windows无关的逻辑和应用事件时极其有用。可以模拟时钟或计时器,可视地显示经过的时间;可以用作系统延时,Delphi提示信息出现只需在该区域停顿几秒,就是Timer组件应用的一个例子;可以检查系统环境、事件,根据结果进行响应;也可以在窗口中闪烁一段正文或图像,提示某种操作或处理正在进行等等。
尽管Delphi的计时器每秒可以产生1000次激发,在编程中还必须注意程序对Timer触发的响应。如果程序处理OnTimer事件的时间超过Interval的设定值,就可能错过事件,因为当下一次触发到来时,系统正忙于处理上一事件,则这次触发就会被忽略。同时要注意其他的Windows应用程序是否会影响Timer的触发。如果后台正运行着一个占用处理器的程序,就可能会导致Timer的触发不准确,从而使前台程序运行出现错误。
这里要强调的是Timer组件是一个非可视组件,可以把它放置到窗体或者其他容器组件上的任何位置。3.实现游戏计时功能
在本章的游戏中,我们加入一个Timer组件,实现游戏的计时功能。
在窗体中加入一个Label组件,将此组件的Caption属性设置为“使用时间”,然后从组件面板上选择System页中的Timer组件。
在Unit1中加入Form1的一个私有成员SpendTime,记录用户计算所用的时间。代码如下所示:
private { Private declarations } SpendTime:Integer;在Form1的onCreate事件中加入如下代码。将SpendTime设置为0,并将Timer1的Enabled属性设置为False,使Timer1组件不能响应OnTimer事件;并将Timer1的Interval属性设置为1000,表示当Timer1有效时,每间隔1000ms(即1秒)发生一次OnTimer事件:
procedure TForm1.FormCreate(Sender: TObject);var i:integer;begin //初始化,设置数组RandomData的长度为4 //并将每个数组元素初始化为零
setLength(RandomData,4);for i := 0 to 3 do RandomData[i]:=0;SpendTime:=0;Timer1.Enabled:=False;Timer1.Interval:=1000;end;然后在标题为“开始”的“开始”按钮的OnClick事件中,加入如下所示的代码,将Timer1的Enabled属性设置为True,使Timer1组件有效,即现在Timer1能响应OnTimer事件,计时开始。并将SpendTime重新设置为0:
Timer1.Enabled:=True;Timer1.Interval:=1000;SpendTime:=0;//将SpendTime重新设为0 再在“计算”按钮的OnClick事件句柄中,增加下面的语句,使Timer1无效:
Timer1.Enabled:=False;最后双击Timer1组件,创建Timer1的OnTimer事件句柄,在其中加入如下所示的代码,将SpendTime加1,并设置Label5的Caption属性:
procedure TForm1.Timer1Timer(Sender: TObject);begin SpendTime:=SpendTime+1;Label5.Caption:='使用时间:'+IntToStr(SpendTime)+'秒';end;这样,每隔1秒钟,程序就刷新一次使用时间。
3.2.3 设计初始界面
按住Shift键,然后单击组件面板中Additional页中的Image组件,这时该组件边缘出现蓝色的边框,并且凹陷下去,表示可以在窗体上连续加入几个Image组件。选择好Image组件后,在窗体的左上角单击,加入1个Image组件,然后依次向右单击鼠标3次,再加入3个Image组件。最后再单击组件面板中最左边的箭头。
为了排列这4个Image组件,先利用Shift键将它们同时选上,然后右击,选择Align命令,在随后出现的Alignment对话框中的Horizontal选项组中选择Space equally,在Vertical选项组中选择Tops,表示这4个组件顶端对齐,水平方向上间距相等。
按照同样的方法加入4个Label组件、3个Button组件和1个Edit组件。按照表3.1所示设置各个组件的属性。
表3.1 各个组件的属性
组件名 Form1 Label1 属性名 Caption Caption AutoSize WordWrap Caption
属性值 速算24
1.单击“开始”按钮,游戏开始,系统将发出4张扑克牌
False False
2.要求用户利用扑克牌显示的数字,通过加减乘除运算,以最快的速度得出24(可以使用括号),JQKA和“王”算做1。然后在文本框中写好表达式,接
着单击“计算”按钮
Label2
Label3 AutoSize WordWrap Caption
False True
3.这时系统会计算输入表达式的结果,告诉用户是对还是错了。在弹出的对话框中单击“OK”按钮,如果错了可以再次输入新的表达式,重复上一步。直
到您的表达式正确,这时系统会恭喜算对了!
Label4 AutoSize WordWrap Caption AutoSize Caption Caption Caption Text
False True 在下面输入数学表达式
False 开始 计算 退出游戏 空
Button1 Button2 Button3 Edit1
现在同时选择Label1,Label2和Label3,将它们左对齐,垂直方向等距离排列。将Button1,Button2和Button3左对齐,垂直方向等距离排列。
下面放置4个Image组件,用于放置4张纸牌的图片。
先选择Image1,然后切换到对象查看器中的属性编辑器,选择属性选项页中的Picture属性,然后在Picture属性值栏中双击,或单击此属性值旁边的带有省略号的按钮,打开Picture Editor对话框,如图3.6所示。然后单击Load按钮,弹出Load Picture对话框,在此对话框中选择background.bmp文件。最后单击OK按钮,退出Picture Editor对话框。
图3.6 指定图片
使用同样的方法,设定其他3个Image组件的Picture属性。
保存我们的新项目,运行之后界面如图3.7所示,与运行时的界面图3.1稍有不同。这里是设计时界面,只有界面没有事件响应。是程序创建过程中的一个步骤的检验。但是,这个程序还没有什么具体的功能,为了让游戏运行起来,必须添加代码,创建相应的事件处理程序。
第3章 “速算24”扑克游戏--单元、异常、逻辑
生成和建立程序
3.2.4 事件处理
需要添加个事件:第一个用于响应单击开始按钮,在此事件中完成发牌,即随机显示图片;第二个用于响应单击计算按钮,解析用户在文本框中输入的表达式,计算表达式的结果,并判断表达式的结果是否等于;第三个用于响应单击退出游戏按钮,退出游戏(程
序)。
1.数据初始化
创建窗体的事件处理程序,在这里进行必要的初始化。第一步先在Unit1中添加Form1的私有成员数组:
private
{ Private declarations }
RandomData:array of Integer;然后,在对象查看器中选中Form1,选中Event选项卡,在OnCreate一栏对应的右边的空白栏中双击,创建OnCreate函数。添加如下代码。
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin //初始化,设置数组RandomData的长度为4
//并将每个数组元素初始化为零
setLength(RandomData,4);
for i := 0 to 3 do
RandomData[i]:=0;
end;这里使用一个for循环语句,i是循环变量,格式是:for循环变量:=初值to末值do循环体。你也可以借助Delphi的自动完成功能,在输入for之后按下Ctrl+J键,生成如下代码:
procedure TForm1.FormCreate(Sender: TObject);
begin
for := to do
begin end;
end;在上述代码中,程序首先利用setLength函数设定可变数组RandomData的数组长度为4,然后,将数组的每一个单元都设置为0。这样,就完成了数组的数据初始化工作。
2.“开始”按钮的Click事件处理
()功能单击开始按钮时,系统就随机地发出张纸牌,显示在个组件中。
()代码首先,我们需要一个循环变量,一个字符串变量存放随机选取的图片的文件名。创建“开始”按钮的OnClick事件处理程序,在begin前头添加需要的变量,然后在此事件
中加入如下所示的代码。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
filename:String;
begin
Randomize;//初始化随机数
for i := 0 to 3 do
begin RandomData[i]:=Random(13)+1;//产生一个1到13的随机数
filename:=IntToStr(RandomData[i])+'.bmp';//根据随机数,得到文件名
//根据i的不同为不同的Image组件载入图像文件
case i of 0 : Image1.Picture.LoadFromFile(filename);1 : Image2.Picture.LoadFromFile(filename);2 : Image3.Picture.LoadFromFile(filename);3 : Image4.Picture.LoadFromFile(filename);
end;
edit1.Text:='';
edit1.SetFocus;
end;
end;在Delphi内部,随机数的产生实际上也是在一套算法的控制之下,Randomize函数用于初始化产生随机数的种子,保证两次产生的随机数不同,而Random(i:integer)则利用初始化过后的随机数种子产生一个1~i之间的随机数。这里i设定为13,以配合扑克牌的张数13。
用来将一个整数转换成一个字符串,和上一章中的的功能恰好相反。我们已经预先准备了位图文件,它们都是形式,文件名则是利用数字命名。中特殊的字符串运算符将两个字符串串联起来,产生一个新的字符串,我们需要的位图文件后缀是,因此,在产生文件名的时候,在数字后面加上这个字符串。语句在上一章中已经讲过,单击开始按钮后,准备接受用户的输入,然后利用方法,把焦点设置到上。是提供的方法之一,用于设置输入
焦点到某个指定的组件。
3.“计算”按钮的OnClick事件
双击“计算”按钮,创建此组件的OnClick事件响应句柄,然后在代码编辑器中加入如下所
示的代码,用于计算用户输入的表达式。
procedure TForm1.Button2Click(Sender: TObject);
var
result:integer;
answer:String;
begin
result:=TotalCompute(Edit1.Text);
if(result=24)then Application.MessageBox('您真行,我服了您!','对了',MB_OK)
else
begin answer:='您输入的表达式的计算结果为'+IntToStr(Result)+'!';Application.MessageBox(PChar(answer),'错了',MB_OK);
end;
end;这段程序根据自定义函数的计算结果判断用户的输入正确与否,并且输出相应的结果以提示
用户。
在语句“result:=TotalCompute(Edit1.Text)”中用到了一个自定义的函数TotalComp-ute,我们用它来计算用户输入的表达式。现在我们还没编写这个函数的代码,所以,目前这段代码是无法运行的。没关系,可以先把它用“//”注释掉,然后随便给 result赋一个值,测试这个事件处理程序的其他部分是否运行正常,例如:
//result:=TotalCompute(Edit1.Text);
result:=24;这样,运行后,单击“计算”按钮后的显示如图3.8所示。
图3.8 成功的提示信息
我们用一个类型的变量存放出错信息,但是函数的第一个参数要求是(字符指针)类型,因此,我们用一个强制类型转换将转换
成。4.“退出游戏”按钮的OnClick事件
双击“退出游戏”按钮,创建此组件的OnClick事件处理程序,然后在代码编辑器中加入如
下所示的代码,用于退出程序。
procedure TForm1.Button3Click(Sender: TObject);
begin
Close;
end;在上一章中我们提到可以用代替,但这里使用来结束程序的运行。这样,可以通过事件来指定在什么条件下窗体可以关闭。
第3章 “速算24”扑克游戏--单元、异常、逻辑
生成和建立程序5.OnCloseQuery事件
当调用方法来关闭窗体时,事件发生。利用事件来指定在什么条件下窗体可以关闭。事件包含一布尔型的参量,可以用它来决定窗体是否关闭。的默认值为。可以利用事件来询问用户是否真的希望马上关闭窗体。我们在这里弹出一个对话框,代码如下所示:
procedure TForm1.FormCloseQuery(Sender: TObject;var CanClose: Boolean);begin if(MessageDlg('现在要退出游戏吗?', mtConfirmation, [mbOk, mbCancel], 0)= mrOk)then canClose:=True else canClose:=False;end;MessageDlg是一种提示对话框,第一个参数是对话框询问的讯息,是一个字符串;第二个参数则代表对话框的类型,mtConfirmation是一个TMsgDlgType的枚举类型,表示这个对话框是个确认对话框。TMsgDlgType类型如下所示:
type TMsgDlgType =(mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);以上定义的对话框类型分别表示:警告、错误、提示、确认和自定义类型。
第三个参数是TMsgDlgBtn类型的集合,这个集合包含了类型为TMsgDlgBtn的按钮,TMsgDlgBtn的定义如下:
type TMsgDlgBtn =(mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mnNoToAll, mbYesToAll, mbHelp);在我们的程序中,利用了一个集合[mbOK, mbCancle],表示在对话框中显示两个按钮:OK和Cancel的组合。
最后一个参数是用来描述帮助索引的长整型变量,用来获取提示用户的帮助信息,这里我们没有任何帮助信息,先不管它。函数和用户交互,返回一个类型的数字,预先定义了一套数字,用来直观地表示对话框返回信息。如果用户单击了按钮,这个对话框返回,效果如图所示。
图3.9 关闭窗口时询问用户
现在,我们已经完成了程序的主体部分。第3章 “速算24”扑克游戏--单元、异常、逻辑
单元间的互相引用3.3.1 单元引用的概念
在第章关于单元的知识里,我们已经知道可以定义不包含窗体的单元,它集中定义了程序中使用的函数,这一节里,我们就要实现这样的一个单元,用来实现上面提到的函数。我们可以在任何单元中编写自己的函数,当然包括与窗体相连的单元。可是我们常常需要用到一些常用的函数,这时最好是创建一个不与窗体相连的独立单元,用它来容纳自己的函数,这称为独立的单元文件。当创建了不与窗体相连的独立单元文件后,项目中的其他单元就能很容易地共享这些函数,其他项目也可以很容易地调用这些函数了。对于单元间的引用,要用到语句。3.3.2 uses语句
语句告诉程序在最终的执行代码中需要用到哪些函数和过程。会自动把一些必须的单元包括进来,例如,,等。对于我们自己编写的单元,如果程序中使用了该单元的函数或代码,也需要包括在部分中。语句具有两种类型:公有引用和私有引用。在部分包含的语句代表的是本单元的公有引用,就是说,这部分的引用可以被其他引用本单元的单元继承性地引用。在部分的语句应包含在部分中的代码所需要的单元,去掉那些可以自动加入到程序中的单元。在部分包含的语句代表的是本单元的私有引用,就是说,这部分的引用只能被本单元内部使用。在部分的语句应只包含在部分中的代码所需的单元的名字。对于单元间的引用,要避免交叉引用。假设有两个单元和,如果出现在的部分的语句中,那么单元便不能出现在单元的的语句中。因为这样会产生对单元的循环访问,编译时会出现错误信息。3.3.3 创建另一个单元
创建一个不与窗体相连的单元文件的方法是,首先选择主菜单的命令,然后选择命令,此时弹出一个对话框,如图所示。在此图中选择选项卡中的,然后单击按钮。此时自动为我们创建一个名为的独立单元文件,并显示在代码编辑器中,我们只需在此加入函数即可。
图3.10 New Items对话框
单元创建之后,就需要实现单元之间的互相引用。这里有两种方法:(1)直接在Unit1中写入uses Unit2,代码如下所示:
var Form1: TForm1;implementation uses Unit2;(2)选择主菜单的File | Use Unit命令,此时Delphi弹出Use Unit对话框,如图3.11所示,在此窗口中列出当前文件没有连接的所有文件,只需选择需要连接的文件即可。当选择了某一文件并单击OK按钮后,当前文件就包含了对所选文件的引用。
图3.11 Use Unit对话框
如果当前文件已经连接了当前项目中所有其他文件,选择命令后,就会弹出如图所示的信息窗口,告诉程序员当前文件已经连接了当前项目中所有其他文件。
图3.12 Information对话框
此时再编译,程序就没有任何错误了。现在我们已经创建了,它将用作我们的数学函数定义单元。在开始定义这个单元之前,需要先了解一下关于的异常处理机制。第3章 “速算24”扑克游戏--单元、异常、逻辑
3.4 异 常 处 理
3.4.1 异常处理的概念 在应用程序开发中如何检测、处理程序的运行错误是一个很重要的问题。在 Delphi 的IDE(集成开发环境)中提供了一个完善的内置调试器,可以发现大部分程序错误。但并不是所有的错误都可以被发现,而且当程序涉及到与外设的数据交换或操作外设,如要求用户输入、读写磁盘等时,错误的发生是程序无法控制的,如输入非法字符、磁盘不能读写等。这些情况不仅会导致应用程序异常中止,而且可能引起系统的崩溃。针对这些问题,Delphi提供了一套强大的异常处理机制。巧妙地利用它,可以使程序更为强健,使用更为友好。
Delphi异常处理机制建立在Protected Blocks(保护块)的概念上。所谓保护块是指用保留字try和end封装的一段代码。保护块的作用是当应用程序发生错误时自动创建一个相应的Exception(“异常”类)。程序可以捕获并处理这个“异常”类,以确保程序的正常结束以及资源的释放和数据不受破坏。如果程序不进行处理,则系统会自动提供一个消息框。“异常”类是Delphi异常处理机制的核心,也是Delphi异常处理的主要特色。Delphi提供的所有“异常”类都是类Exception的子类。用户也可以从类Exception派生一个自定义的“异常”类。
3.4.2 资源保护方式
回收分配的资源是确保程序健壮性的一个关键。但默认情况下异常发生时程序会在出错点自动退出当前模块,因此需要一种特殊的机制来确保即使在异常发生的情况下,释放资源的语句仍能被执行,而Delphi的异常处理正提供了这种机制。
Delphi提供了一个保留字finally,用于实现资源的保护。
{分配资源}
try {资源使用情况} finally {释放资源}
end;try„finally„end就形成了一个资源保护块。finally后面的语句在任何情况下(不论程序是否发生异常)都会执行。
在异常保护的情况下,当异常发生时,系统会自动弹出一个消息框,在框中显示异常的消息。退出当前模块后异常类自动清除。
3.4.3 异常响应方式
异常响应为开发者提供了一个按需进行异常处理的机制。try„except„end形成了一个异常响应保护块。与finally不同的是:正常情况下except 后面的语句并不被执行,而当异常发生时程序自动跳到except处,进入异常响应处理模块。当异常被响应后异常类自动清除。
下面是异常响应方式的一般代码:
try {程序正常功能} except on ESomething do {响应特定异常} else {提供默认响应} end;保留字on„do用于判断异常类型。必须注意的是:except后面的语句必须包含在某一个on„do模块中,而不能单独存在。这是又一个与finally不同的地方。
3.4.4 提供默认响应
在异常响应模块中,一般我们只对希望响应的特定异常进行处理。如果一个异常发生而响应模块并没有包含对它的处理代码,则退出当前响应模块,异常类仍被保留。
为了保证任何异常发生后都能在当前响应模块中被清除,可以定义默认响应:
try {程序正常功能} except on ESomething do {响应特定异常} else {提供默认响应} end;由于else可以响应任何异常,包括我们一无所知的异常,因此在默认响应中最好只包括诸如显示一个消息框之类的处理,而不要改变程序的运行状态或数据。
第3章 “速算24”扑克游戏--单元、异常、逻辑
3.5 数学逻辑单元(1)
此游戏程序最关键的地方是如何将用户输入的字符串表达式解析成数学表达式。为了使程序结构清晰明了,我们将此解析代码和程序的主代码分开,单独编写成一个单元。
3.5.1 算法设计
游戏的难点是如何将一字符串形式的表达式解析成计算机能计算的算术表达式。例如对于字符串“3^(4*(9+4))”,如何让计算机解析、计算。
我们的想法是按照数学四则运算规则,先逐层进入最里层的括号,然后在括号内部计算乘方,接着进行乘(除)法运算,最后按顺序进行加(减)运算,当本层括号内部计算完成后,返回结果,去掉括号内部数据,退出到下一级括号(如果有)内进行计算。
这里面涉及的技术细节主要有下面几点:
(1)层层剥离括号,然后从最里层的括号开始计算。(2)对于每一个运算符号,找到符号两侧的数字,形成一个计算式。
(3)每一个子计算式完成后,运算结果返回到原始数列中,作为子串的一部分,继续进行上述计算。
3.5.2 字符串的相关函数
在游戏中,用户输入的都是字符数据,我们需要从这些字符中分析得到数字和运算符号,因此要用到与字符串操作有关的函数。
function Pos(sub , all:string):integer;这个函数含有两个参数:sub表示要查找的字符,all表示原字符串。函数在字符串all中寻找指定的字符sub的位置,如果字符串中不存在sub字符,则函数结果为0。
function LastDelimiter(sub,all :string):integer 这个函数含有两个参数:sub表示要查找的字符,all表示原字符串。函数返回在字符串all中所有查找到的指定字符sub的最后一个的位置,如果字符串中不存在sub字符,则函数结果为0。
function Copy(allstring:string;first,length:integer):string 这个函数的3个参数的含义分别是:allstring代表原来的字符串,first表示拷贝开始的位置,length表示要拷贝的子串长度。函数返回拷贝成功的子串。
procedure Delete(str:string;ppos,length:integer)这个过程用于删除字符串中的一段字符。参数str代表将要操作的字符串,ppos代表开始删除的位置,length表示将要删除多少个字符。function Length(S): Integer;Length函数返回字符串S的长度。
function Trim(const S: string): string;overload;function Trim(const S: WideString): WideString;overload;Trim函数返回字符串S去掉前面和后面的空格后的字符串。
下面的例子给出一个综合利用字符串处理函数编写的一个处理特定字符串的函数,它的功能是:输入一个字符串后,可以返回字符串中两个单括号之间的子字符串,并去掉前面和后面带着的空格:
function GetMyStr(const S: string): string;begin Result:=Trim(Copy(S,Pos('<',S)+1,Pos('>',S)-Pos('<',S)-1));end;比如我们在程序中写到GetMyStr(‘This is a test < Result to output > end of test’);,会得到字符串“Result to output”。
3.5.3 算法的代码编写
基于上述的考虑和知识基础,我们在声明部分定义下列几个主要函数:
(1)AnyLastPos函数定位最后一个算术运算符的位置。
function AnyLastPos(Str:String):integer;(2)AnyFirstPos函数定位最先一个算术运算符的位置。
function AnyFirstPos(Str:String):integer;(3)AnyFirstF函数判断最先出现的符号是+号、-号、*号还是/号。
function AnyFirstF(Str:String):Char;(4)SubCompute函数用于计算不带()号的加、减、乘、除运算。
function SubCompute(Str:String):integer;(5)TotalCompute函数用于计算表达式的结果。
function TotalCompute(Str:String):integer;1.寻找最后一个算术运算符
定义4个整数变量SubPos,PluPos,MulPos,DivPos,在给定的字符串中寻找+,-,*,/的最后位置,将这些位置存储在上述的4个变量中,然后比较4个符号出现的位置,得到数值最大的运算符;在返回的结果中,返回这个运算符的位置。
程序代码如下所示:
function AnyLastPos(Str:String):integer;var SubPos:integer;PluPos:integer;MulPos:integer;DivPos:integer;Pos:Integer;begin //定位字符串中最后一个运算符的位置
SubPos:=LastDelimiter('-',Str);PluPos:=LastDelimiter('+',Str);MulPos:=LastDelimiter('*',Str);DivPos:=LastDelimiter('/',Str);Pos:=SubPos;if(Pos
分别在给定的字符串中寻找+,-,*,/第一次出现的位置,然后比较4个符号出现的位置,得到数值最小的运算符。在返回的结果中,传递的是这个运算符的位置。
程序代码如下所示:
function AnyFirstPos(Str:String):integer;var SubPos:integer;PluPos:integer;MulPos:integer;DivPos:integer;ForPos:integer;FirstPos:integer;begin //定位字符串中最先一个运算符的位置
SubPos:=Pos('-',Str);PluPos:=Pos('+',Str);MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);ForPos:=Pos('^',Str);FirstPos:=200;if(SubPos=0)then //如果没有-号
SubPos:=200;//将SubPos设置成一个不可能的值
if(PluPos=0)then //如果没有+号
PluPos:=200;//将PluPos设置成一个不可能的值
if(MulPos=0)then //如果没有*号
MulPos:=200;//将MulPos设置成一个不可能的值
if(DivPos=0)then //如果没有/号
DivPos:=200;//将DivPos设置成一个不可能的值
if(ForPos=0)then //如果没有^号
ForPos:=200;//将ForPos设置成一个不可能的值
if(FirstPos>SubPos)then FirstPos:=SubPos;if(FirstPos>PluPos)then FirstPos:=PluPos;if(FirstPos>MulPos)then FirstPos:=MulPos;if(FirstPos>DivPos)then FirstPos:=DivPos;if(FirstPos>ForPos)then FirstPos:=ForPos;
AnyFirstPos:=FirstPos;//结束函数,返回位置
end;第3章 “速算24”扑克游戏--单元、异常、逻辑
3.5 数学逻辑单元(2)
3.得到最先出现的运算符类型
这个函数的返回结果是Char类型,代表这是一个字符变量。实际上,它返回的是+、-、*、/ 这4个符号中最早出现的一个。
程序分别寻找4个符号最早出现的位置,然后判断最先出现的是哪一种符号,再根据符号类型返回代表运算符的字符。
在具体的实现过程中,因为我们要得到最先出现的运算符,所以判断的是每次寻找后各个运算符的位置的最小值。如果不存在这个运算符,则将代表这个运算符位置的相应变量设置为200。对于本程序来说,这是一个搜索过程中不可能达到的值,这样就排除了这个位置的继续比较的可能。
程序代码如下所示:
function AnyFirstF(Str:String):Char;var SubPos:integer;PluPos:integer;MulPos:integer;DivPos:integer;Operator:char;tempPos:integer;begin SubPos:=Pos('-',Str);PluPos:=Pos('+',Str);MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);
if(SubPos=0)then //如果没有-号
SubPos:=200;//将SubPos设置成一个不可能的值
if(PluPos=0)then //如果没有+号
PluPos:=200;//将PluPos设置成一个不可能的值
if(MulPos=0)then //如果没有*号
MulPos:=200;//将MulPos设置成一个不可能的值
if(DivPos=0)then //如果没有/号
DivPos:=200;//将DivPos设置成一个不可能的值
Operator:='-';tempPos:=SubPos;if(tempPos>PluPos)then begin tempPos:=PluPos;Operator:='+';end;if(tempPos>MulPos)then begin tempPos:=MulPos;Operator:='*';end;if(tempPos>DivPos)then begin tempPos:=DivPos;Operator:='/';end;
AnyFirstF:=Operator;//结束函数,返回位置 end;4.计算不带括号的运算表达式
做完上述工作后,我们可以开始进行一些实际的运算了。
包括加、减、乘、除、乘方运算的表达式的程序算法如下所示:
(1)寻找乘方符号“^”,如果存在,则计算一次乘方,去掉计算过的部分,接着循环查找和计算子串的乘方。
(2)寻找乘号“*”或者除号“/”,如果存在,则计算一次乘(除)法,去掉计算过的部分,接着循环计算子串的乘除法。
(3)寻找加号“+”或者减号“-”,如果存在,则计算一次加(减)法,去掉计算过的部分,接着循环计算子串的加减法。
上述算法是严格按照顺序进行的,它体现了数学运算中的优先关系,经过上述的计算,子字符串被分解,计算完毕。
无论是乘方、乘除法还是加减法,内部实现的逻辑是基本一致的。下面,我们设定有一个运算表达式:3+2^5/4。
程序代码如下所示:
function SubCompute(Str:String):integer;var Middle:String;Mul2:String;Right:String;First:integer;tempStr:String;temp:integer;Left:String;Mul1:String;MulPos:Integer;DivPos:Integer;Fuhao:Char;begin Middle:='';Mul2:='';Right:='';
//定位第一个^号位置,计算乘方
First:=Pos('^',Str);While(First<>0)do //循环计算乘方
begin tempStr:=Copy(Str,1,First-1);temp:=AnyLastPos(tempStr);Left:=Copy(Str,1,temp);Mul1:=Copy(str,temp+1,First-temp-1);tempStr:=Copy(str,First+1,Length(str)-First);temp:=AnyFirstPos(tempStr);if(temp=200)then begin Mul2:=tempStr;Right:='';end else begin Mul2 :=Copy(tempStr,1,temp-1);Right:=Copy(tempStr,temp,Length(tempStr)-temp+1);end;Middle:=FloatToStr(IntPower(StrToInt(Mul1),StrToInt(Mul2)));Str:=Left+Middle+Right;First:=Pos('^',Str);end;
//定位第一个*号或/号的位置
MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);First:=MulPos;if(MulPos>DivPos)then First:=DivPos;if((DivPos=0)and(MulPos<>0))then begin First:=MulPos;DivPos:=2000;// 将除号所在位置设置成一个大于MulPos但又不可能的值
end;if((DivPos<>0)and(MulPos=0))then begin First:=DivPos;MulPos:=2000;// 将乘号所在位置设置成一个大于DivPos但不可能的值
end;while(First<>0)do //循环计算乘、除
begin tempStr:=Copy(Str,1,First-1);temp:=AnyLastPos(tempStr);Left:=Copy(Str,1,temp);Mul1:=Copy(Str,temp+1,First-temp-1);tempStr:=Copy(Str,First+1,Length(Str)-First);temp:=AnyFirstPos(tempStr);if(temp=200)then begin Mul2:=tempStr;Right:='';end else begin Mul2 :=Copy(tempstr,1,temp-1);Right:=Copy(tempStr,temp,Length(tempStr)-temp+1);end;if(MulPos>DivPos)then Middle:=IntToStr(StrToInt(Mul1)div StrToInt(Mul2))else Middle:=IntToStr(StrToInt(Mul1)*StrToInt(Mul2));Str:=Left+Middle+Right;
MulPos:=Pos('*',Str);DivPos:=Pos('/',Str);First:=MulPos;if(MulPos>DivPos)then First:=DivPos;
if((DivPos=0)and(MulPos<>0))then begin First:=MulPos;DivPos:=2000;// 将除号所在位置设置成一个大于MulPos但又不可能的值
end;if((DivPos<>0)and(MulPos=0))then begin First:=DivPos;MulPos:=2000;// 将乘号所在位置设置成一个大于DivPos但不可能的值
end;end;//定位+、-号首先出现的位置
First:=AnyFirstPos(Str);if(First=200)then //如果没有+、-号,则可以直接返回结果
begin SubCompute:=StrToInt(Str);exit;end;Fuhao:=AnyFirstF(Str);//确定首先出现的符号是+号还是-号
while(First<>0)do begin //如果找到+号或-号
tempStr:=Copy(Str,1,First-1);temp:=AnyLastPos(tempStr);Left:=Copy(Str,1,temp);Mul1:=Copy(Str,temp+1,First-temp-1);tempStr:=Copy(Str,First+1,Length(Str)-First);temp:=AnyFirstPos(tempStr);if(temp=200)then begin Mul2:=tempStr;Right:='';end else begin Mul2 :=Copy(tempStr,1,temp-1);Right :=Copy(tempStr,temp,Length(tempStr)-temp+1);end;if(Fuhao='+')then Middle:=IntToStr(StrToInt(Mul1)+StrToInt(Mul2))else Middle:=IntToStr(StrToInt(Mul1)-StrToInt(Mul2));Str:=Left+Middle+Right;First:=AnyFirstPos(Str);if(First=200)then break;Fuhao:=AnyFirstF(Str);end;
SubCompute:=StrToInt(Middle);end;程序执行过程如下所示:
(1)定位字符串中第一个乘方符号“^”的位置First。这个式子中的First为4。
(2)如果存在乘方符号,即First不等于0,则继续进行计算,否则退出循环。
(3)进入循环体内部,得到“^”前面的子串tempStr(“3+2”),寻找tempStr中的最后一个运算符temp(这里是“+”),则Temp和First之间的字符就是乘方符号的第一个参数(“2”)。
(4)同样的逻辑,得到“^”后面的子串tempStr(“5/4”),寻找tempStr中的第一个运算符位置temp(“/”),则Temp和First之间的字符就是乘方符号的第二个参数(“5”)。
(5)去掉乘方符号和两个参数,得到左侧子串left(“3+”)和右侧子串right(“/4”)。
(6)利用这两个参数和乘方符号,计算乘方,将结果返回,并插入在left和right之间,得到一次计算后的新字符串(“3+32/4”)。
(7)判断新串内部是否包含“^”,如果包含,则返回到步骤(3),不包含则进入下一种运算。
第3章 “速算24”扑克游戏--单元、异常、逻辑
3.5 数学逻辑单元(3)5.计算整个表达式的值
TotalCompute函数利用循环,找到最内层的一对括号,然后调用SubCompute函数处理这一对括号中的表达式。SubCompute函数处理的表达式中已经没有括号了,因此SubCompute只需处理乘方、加、减、乘、除,返回结果,形成新的字符串。
当整个字符串缩减至空值时,整个表达式计算完成。
程序代码如下所示:
function TotalCompute(Str:String):integer;var First:integer;Last:integer;SubStr:String;LeftStr:String;Middle:String;Right:String;temp:integer;begin First:=LastDelimiter('(',Str);//定位最后一个(号位置 while(First<>0)do begin SubStr:=Copy(Str,First+1,Length(Str)-First);Last:= Pos(')',Str);//Last:=Last+First;//定位最后一个(号以后的最开始的)号位置
LeftStr:=Copy(Str,1,First-1);//(号左边的字符串
Middle:=Copy(Str,First+1,Last-First-1);//()号中间的字符串
Right:=Copy(Str,Last+1,Length(Str)-Last);//)号右边的字符串
temp:=SubCompute(Middle);//进入下面的计算
Middle:=IntToStr(temp);
Str:=LeftStr+Middle+Right;First:=LastDelimiter('(',Str);end;
Result:=SubCompute(Str);end;end.在程序中,“计算”按钮的OnClick事件处理程序中调用TotalCompute函数。函数中使用了一些数学函数和定位字符串的函数,这些函数Delphi已经在相应的系统单元中进行了定义,我们需要把这些系统单元包括到文件里面:
uses Sysutils,Math;将前面调用TotalCompute的注释去掉,把代码改回:
procedure TForm1.Button2Click(Sender: TObject);var result:integer;answer:String;begin result:=TotalCompute(Edit1.Text);if(result=24)then Application.MessageBox('您真行,我服了您!','对了',MB_OK)else begin
第三篇:c++24点游戏
c++24点游戏
#include “iostream” #include “string” using namespace std;
//定义Stack类
const maxsize=20;
enum Error_code { success, overflow, underflow };
template
bool empty()const;bool full()const;int size()const;void clear();
Error_code top(T &item)const;Error_code pop();
Error_code push(const T &item);private: int count;T entry[maxsize];};
template
template
bool Stack
template
bool Stack
template
template
template
Error_code Stack
template
Error_code Stack
template
Error_code Stack
Stack
int set;
// 判断程序中的异常,以便适时退出?//
void process(char c)
//计算两个数的 +-* / 运算// { int k=0;double a,b;sign.pop();
if(num.top(b)==success){
num.pop();
if(num.top(a)==success){ num.pop();k=1;} } if(k){ switch(c){
case '+': num.push(a+b);break;case '-': num.push(a-b);break;case '*': num.push(a*b);break;case '/': if(b==0){ set=4;num.push(-1);} else
num.push(a/b);break;} }
else {set=1;num.push(-1);} }
void get_command(string &str){
cout<<“n请输入要进行运算的表达式,包括” +,-,*,/,=,(,)“和数字,”< <<“注意: 以数字开头,等号结尾,中间括号要匹配.”< double do_command(const string &str){ string s=“"; double outcome=-1;char c; for(int i=0;str[i]!=' ';i++){ if(set!=0)break;//例外 则停止运行 while(1){ //分离数据与运算符 if(str[i]<='9' && str[i]>='0' || str[i]=='.'){ s+=str[i];i++;} else { if(s!=”“){ if(num.push(atof(s.c_str()))==overflow)set=3;s=”“;} break;} } char ch= str[i]; switch(ch){ //处理运算的优先级,并注意例外抛出 case '*': case '/': if(sign.top(c)==success)if(c=='*'||c=='/')process(c);if(sign.push(ch)==overflow)set=3;break;case '+': case '-': while(sign.top(c)==success){ if(c!='(')process(c);else break;} if(sign.push(ch)==overflow)set=3;break;case '(': if(sign.push(ch)==overflow)set=3;break;case ')': while(sign.top(c)==success){ if(c!='(')process(c);else break;} sign.pop();break;case '=': while(sign.top(c)==success){ if(c!='(')process(c);else break;} break; default: set=2;break;} } if(num.size()==1 && sign.size()==0)num.top(outcome);else set=1; if(set==0)cout<<”运算结果是:n“< if(set==1)cout<<”n您输入的不匹配,有错误发生。Result lost!“< if(set==4)cout<<”n 分母为0,不能进行除法运算,出现溢出,Lost result!“< return outcome;} void main()int f(){ double out;do { string str,s;set=0; get_command(str);s=str; if(str[0]=='-')str='0'+str;//处理表达式中的负号 for(int i=1;str[i]!=' ';i++){ if(str[i]=='-' && str[i-1]=='('){ str.insert(i,”0“);i++;} } out= do_command(str); cout< 我gai过此行 cout<<”如果你算的结果不等于24,需要重新计算请输入你算出的结果,程序有漏洞,请合作。“< return out;} int main(void) { int ii,zz,jj; printf(”0-12的4个数字nn“); for(jj=0;jj<2;) { for(ii=0;ii<4;ii++) { zz=rand()()% 12; cout< } cout<<”请用这4个数字算出24“< f(); cout<<”是否继续;是1否2"< cin>>jj; cout< } 第一期 1)蒙眼夹乒乓(单人游戏) 规则:选手带上眼罩,用筷子将水里的乒乓球依次夹出,规定时间内(60秒)内,夹出8个即可通关。通关获得现金红包一个,未通关的可以获得纪念品。道具:眼罩,容器(加水),乒乓球,筷子 2)咬纸袋 选手除脚以外的身体其他部分,不能触碰地面,用嘴咬起纸袋后,放在指定的圆柱上,在60秒时间内,完成规定的个数即为成功。 3)抽出彩带【单人游戏,双人对抗】 规则:选择两名选手同时进行比赛。每位选手快速取出压在瓶子下面的彩带,并保持瓶子不倒,在60 秒内最新完成8个的选手即获胜。道具:水瓶,彩带,秒表,桌子(竞技性质的 如60秒内率先完成8个的获胜,后完成的只要要在规定时间内也有小奖品) 第二期 4)舞 选手双脚均带上计步器,然后躺在垫子上,比赛开始后,选手快速抖动带有计步器的部位,在60秒时间内,计步器上的数字相加最多者,即为胜利。 5)蒙眼夹弹珠(单人游戏) 规则:选手带上眼罩,用筷子将水里的弹珠依次夹出,规定时间内(60秒)内,夹出8个即可通关。通关获得现金红包一个,未通关的可以获得纪念品。道具:眼罩,容器(加水),弹珠,筷子 6)皮球进框 选手扯直固定在前方杆子上的绳圈,使球沿着两条绳子滚动,并准确落入下面篮子中,在60秒时间内,完成规定个数即为成功。(三个框从第一个框开始一个个进去) 第三期 7)筷子立胶棒 选手用筷子夹起胶棒,以叠罗汉的形式,在胶棒上面叠胶棒,在60秒内,完成最多的即为胜利。(也可以是完成规定个数即为成功) 8)乒乓水上漂【单人游戏】 规则:选手将乒乓球从装有水的杯子吹到另一个杯子里去,按照顺序依次通过桌上所有的水杯。在规定时间60秒内,成功运送5个几个通关。道具:桌子,纸杯,水,乒乓球,秒表 9)袋鼠跳【单人游戏,双人对抗】 规则:选择两位选手,钻入麻袋中,快速跳向前面的桌子,用气筒将三个气球吹爆,然后跳回终点。用时最短者为胜。胜者可抽取现金红包一个,败者获得精美纪念品。 道具:麻袋,桌子,气球,打气筒,秒表 第四期 10)管管相连(双人游戏) 规则:两位选手利用吸管传递乒乓球。第一位选手用吸管将容器中的乒乓球吸出,第二名选 手接着用吸管吸住前一名选手的乒乓球,再送入一边的容器中。在规定时间内(90秒内)成功搬运8个乒乓球即可每人获得一个现金红包。未能完成则获得精美纪念品。 道具:乒乓球,吸管,两个容器。 11) 挤眉弄眼吃薯片(单人游戏) 规则:薯片放在挑战者的额头,挑战者通过面部肌肉的运动,将薯片运至嘴中,每人3次机会,成功运送1片可抽取1个红包,运送2片可抽取2个红包,运送3片可抽取3个红包。道具:计时器、薯片若干。 12)粉扑满面吹乒乓(单人游戏) 在一透明的盆内,装入面粉和乒乓球,参赛者带好护眼后,用力吹出乒乓球,在规定时间内,吹出X个乒乓球为胜。道具:透明水缸,面粉,乒乓球 第五期 13)乒乓搬运工(分开进行)规则: 单人比赛,选择两位选手,分开进行对抗。 在规定时间内(90秒或者60秒),选手用吸管将乒乓球从容器中吸出,放入另一个空的容器中内,中途不能掉落乒乓球,否则该球作废。最后搬运数量多的选手取胜。 14)踩气球(双人游戏) 规则:一位选手带上眼罩之后,原地转6圈,在另一位选手的口令指引下,踩爆地上的气球。在规定时间内(90秒内)成功踩爆所有气球,即可每人获得现金红包一个。未能完成则获得精美纪念品。道具:蒙眼布,秒表,气球 15)呼啦圈套可乐 选手站在指定区域,滚动呼啦圈,使之套住前面的可乐瓶,在60秒时间内,完成规定个数即为成功。(可以重复套在一个上面) 边游戏边学数学 注意事项: 1、会场的布置最好要卡通化,这样才能引起孩子们的兴趣;并且也能让家长们的心情愉悦。(品牌营销十分注重氛围的营造) 2、给与会的家长人手一本公司制作的童话数学的宣传册(好处是通过图文并茂的形式第一时间抓住家长们的眼球,也省却许多枯燥的品牌介绍)我会在本演讲稿最后附上宣传册的内容。(第四页开始) 作稿前分析:根据你们提供的素材、资料,我的选取内容考虑的是:以一个家长的角度,更希望了解到的是该教材为孩子带来的是什么样的效果,以及该课程的重要性在何处! 策略:讲解中通过游戏加深印象及理解。也是时时吸引住孩子和家长们的注意力。重点不仅是在讲的要深情并茂,而且要会利用自身的题材新颖性,调动气氛,感触人心。 宗旨:给孩子们和家长们带来独一无二的亲子演讲稿会 1、前言:伟大的数学家华罗庚说过:“宇宙之大,粒子之微,火箭之速,化工之巧,地球之变,日用之繁,无处不用数学。” 2、童话数学是要让孩子们——寓教于乐。 其原理是:将系统的数学知识与生动的童话故事,精彩的卡通 片,有趣的童话数学练习册,和精彩的数学游戏自然,巧妙地结合在一起,充分调动幼儿学习数学的兴趣,积极性,主动性和参与性。 其三大金字招牌: 由清华大学开发 教育部鉴定通过并要求推广 人民教育出版社出版 其中的四大法宝:四大法宝: 一、卡通片 二、互动教育学习系统 三、童话练习册 四、家长学习指导手册 经理发言:“现在就让大家感受下。” 前面要尽量避免长篇大论,因为举行会议最重要的就是在前 3分钟要抓住观众的注意力,那后面观众才会不觉得乏味,再加上孩子们的因素,这方面就要加倍注意了。因此,描述大纲后,就要开始活动: (1)播放卡通片启蒙篇1(2)看完动画片后,进行容易学着玩,又操作方便的游戏 因为在场的孩子多,不会一一配合,因此,要做好幼稚园阿姨的培训,让她们带动孩子们。你们的工作人员也要指导家长们,这是拉近彼此距离,增加信任感的最佳时机。好,一切完毕后,游戏过后,大家都显得十分的兴奋,这时,发制作出来的两种宣传册,里面混有一部分童话练习册加一部分家长学习指导手册内容(要图文并茂),一种是给孩子设计的,要图片及游戏介绍,童话故事要多些;一种是给父母准备的,文字多些。一边呢,由经理继续发表言论。以下: 3、童话数学将带给孩子什么 让孩子从小感受“清华”的气息 东方童话数学启蒙篇给孩子带来什么? 让孩子从小开始对学习数学有兴趣、有方法,在轻松快乐中学好数学。让孩子从小开始学到灵活、学到方法、学会思考、学会创造、变得认真、变得准确; 在潜移默化中培养孩子的观察力、判断力、记忆力、想象力、反应力、创造力,激发孩子的各项潜能。 就是有利于孩子的大脑成长、身心健康、自信心和勇敢精神。 就是给孩子一个面向未来的创造性思维,现在超前一小步,将来跨越几大步 让幼儿园与小学一年级有机的相联、成功过渡。 看(卡通片)-----讲(数学知识)-----练(所学数学知识)-----玩(反复巩固所学的知识) 即:通过卡通片进入与数学新知识有关的童话故事情节;通过老师或家长的展开讲解让孩子们理解新知识,培养健康情感;通过做童话练习册进一步理解和学习新知识,并与老师或家长进行交流与沟通;通过“玩”相关的教育学习游戏,使孩子们既有合作与交流,又能在能力方面得到多种训练(这里举例:以一个游戏来说,例如,时间知识游戏——智救精灵王,它既丰富了孩子们的好奇心,体会到玩游戏的快乐,有让孩子们在游戏中运用观察力、判断力、反应力和创造力进行合作和交流等),让孩子顺利实现幼儿园到小学的跨越。 剩下时间作为跟家长和孩子针对宣传册的解读和谈论时间(为免冷场,要安排工作人员作为“受益父母”莅临现场说法) 这时,可以补充上我的那篇前稿“我家小星星的转变”的作者 作为现场致谢感言!(附件文章已经作为前稿交由你方) 致幼儿父母的宣传册的内容(分以下几个方面): 1、幼儿学习数学的重要性: 世界著名的幼儿教育家蒙台梭利 关于儿童数学能力发展的理论 童年时代的每一个年龄,每一个阶段都有其特殊的需要,如果这些需要不在最突出的时机得到满足,那么幼儿某些能力的发展将永远受到抑制。这就是她认为的幼儿能力的“关键期” 她特别强调:抓住幼儿数学学习的敏感期,尊重幼儿数学发展的阶段性。 随着数字化时代的到来,以计算机为基础的信息社会越来越依赖于数学,市场经济的一系列经济活动、生活中信息处理等无不与数学息息相关,为未来,今天的孩子从小学好数学显得万分迫切。 数字化时代,数学是创造性能力的基础,融入社会的每一个角落;贯穿于孩子学习的整个过程,是成功未来的保证。 为什么数学培养和锻炼儿童的思维能力? 因为数学最利于幼儿的大脑成长 为什么幼儿在认知领域、情感领域、操作技能领域的水平都与孩子对数或数学的认知密切相关?因为数学最利于幼儿的身心健康 为什么幼儿回答数字或数学问题时,比答对其它方面的问题表现的更为高兴、更为兴奋?因为数学最易培养孩子的自信心与勇敢精神„ 为什么由幼儿园升入小学后,孩子最陌生的是数学? 因为由幼儿园大班升入小学是孩子的第一次飞跃;而数学比较抽象,孩子没能很好的衔接上。 为什么要让幼儿学数学?入学前让孩子接触数学有什么意义呢? 为入小学做准备只是其一,根本的意义是:潜移默化地热爱数学,开发潜能。她特别强调:抓住幼儿数学学习的敏感期,尊重幼儿数学发展的阶段性。 英国的一位教育家是这样理解数学的:数学是换脑的一门学科。 特别是对幼儿及小学低年级的学生,学数学的目的是什么?就是有利于大脑的成长。 数学最宜于促进孩子智力、智商、智能、智慧的发展,于是孩子的整体素质就得到极大提高;整体素质提高了,将来干什么都能行,数学的特点就是在这儿。 数学最利于幼儿的大脑成长 数学为什么培养和锻炼儿童的思维能力?科学家们经过大量研究发现,数学是让孩子大脑成长最快的学科,幼儿园大班的孩子正是处在这一最佳时期,所以国家教育部新颁发的《幼儿园教育指导纲要》中明确指出:幼儿园的数学活动要让幼儿从生活中、游戏中感受事物的数量关系,并体验到数学的重要和有趣。 对数学认知的重要在孩子刚入园时已有表现,到大班后已逐步加深,如学习序数、顺数、倒数、单双数、相邻数,以及数的组成,加深运算,还要在会认的基础上书写数字。数学的逻辑性很强,如果知识脱节,衔接不上,就会造成孩子不会,有厌烦,畏惧情绪,久而久之就不喜欢上数学课了,也就耽误了孩子大脑的最佳发育期。 数学最利于幼儿的身心健康 《幼儿园教育指导纲要》从幼儿身心发展角度,以儿童心理活动的不同领域作为出发点,把幼儿教育目标分为三大领域: 认知领域,包括知识的掌握和认知能力的发展; 情感领域,包括兴趣、态度、习惯、价值观念和社会适应能力的发展,操作技能领域,包括感知动作、运动协调、动作技能的发展。而这三大领域都与孩子对数或数学的认知密切相关,可见,数学对孩子的身心的健康发展也非常重要。 数学最利于幼儿增强自信心 科学家们发现幼儿在回答数字或数学问题时,如果回答对了,比答对其它方面的问题时孩子表现的更为高兴、更为兴奋、更为自豪,所以数学最易培养孩子的自信心与勇敢精神„ 2、现今教育的缺陷 幼儿教育中最不正确的观点:不重视幼儿的数学学习 我们不难发现,生活中到处是数,可以说我们生活在一个“数学”的世界中,在孩子的一日生活里,也到处充满数学。 既然数学对对幼儿大脑成长、身心健康及自信心的如此重要,孩子在幼儿园期间花费上万元,甚至几万元,为什么对最宜于促进孩子智力、智商、智能、智慧发展的数学不重视呢?这是幼儿教育中最不正确的观点。 英国的一位教育家是这样理解数学的:数学是换脑的一门学科。特别是对幼儿及小学低年级的学生,学数学的目的是什么?就是有利于大脑的成长。说得通俗一点,当考虑不严谨、不认真的时候,通过数学的训练变得严谨了认真了;当计算不准确的时候,通过数学变得准确了;当反应不灵活的时候,通过数学的激励变得灵活了,于是这个孩子整体素质就得到极大提高;整体素质提高了,将来干什么都能行,数学的特点就是在这儿。 由幼儿园升入小学后,孩子最陌生的是数学 数学对幼儿大脑成长、身心健康及自信心的重要性,在小学一年级就表现出来了,小学一年级孩子最怕学什么? 什么最陌生?小学一年级时孩子们最大差距是什么?都是数学。 最陌生是因为数学比较抽象,现在小学数学不但很灵活,而且非常着重应用以及空间思维的培养,因此,难度加大了很多。 幼儿园大班时就需要找到好方法,培养孩子的数学兴趣 如果在孩子开始接触数学的时候没有培养出好的兴趣,就很容易导致因缺乏兴趣,而被刚露头的一点点困难所击退,从而致使数学学习成绩不佳,转而害怕数学,最终导致恶性循环。 然而数学是枯燥的,在学数学中幼儿接触到的就是几个数字而已,对于幼儿来说,就更加没趣了,怎样让孩子学得有趣。 首都师范大学教授、著名数学科普作家李佩教授说过:“不爱学习的孩子哪儿都有,不爱听故事的孩子一个也找不到。” 3、童话数学的发展背景和起因 蒙台梭利关于数学能力发展的理论 1、抓住幼儿数学学习的敏感期,尊重幼儿数学发展的阶段性。 童年时代的每一个年龄,每一个阶段都有其特殊的需要,如果这些需要不在最突出的时机得到满足,那么幼儿某些能力的发展将永远受到抑制。这就是她认为的幼儿能力的“关键期” 2、早期数学学习应建立在幼儿操作的基础上。 蒙台梭利认为,幼儿早期的数学学习的特点是一种典型的感知经验性学习,而不是抽象的、理性的学习。因此,她相信,幼儿数学教育必须以具体化的抽象来引导孩子学习数学。 3、强调“有准备的环境”对幼儿数学能力发展的影响。 对数的理解与感知,是幼儿在环境作用下发生兴趣时而实现的。“有准备的环境”应包括教师、幼儿和环境这三个要素,而且,她把环境列为教育的第一要素。 东方童话数学启蒙篇就是对这一环境的最好诠释。 幼儿园大班与小学的关系 现阶段高中升入大学的升学率大约为70%—80%,初中升入高中的升学率大约为50%—60%,由此看出初中的竞争是很激烈的,在小学阶段养成一个热爱学习的好习惯和兴趣就能为初中打个好基础。 小学阶段是孩子学习兴趣、学习能力以及综合素质、创新思维培养的黄金时期。过去有学前班,现在没了,幼儿园大班是幼儿园与小学衔接的重要阶段,由幼儿园大班升入小学可以说是孩子的第一次飞跃,对于孩子所学的数学科目尤其如此。 幼儿园大班的数学与小学一年级的数学关系 幼儿园大班的数学与小学一年级的数学是紧密相连又相互渗透,如学习序数、顺数、倒数、单双数、相邻数,以及数的组成,加深运算,数学的初步逻辑等,所以大班时对数学一定要有兴趣,觉得好玩,才能与小学一年级衔接好,凡事兴趣是第一位的,从小培养兴趣很重要。 从幼儿园大班开始,家长对孩子学习数学的方法就要高度重视 为什么叫数学?不叫语文学?不叫英语学?说明数学特殊、重要,从小就是一门学问,孩子有了兴趣才会有方法、技巧,根正才能苗壮。 无论是对于当前的发展,还是日后的发展,热爱数学都是很重要的。试想,孩子对索然无味的科目能学好吗?即使被塞进了许多数学知识,也是无济于事的,那只会使孩子越来越远离数学。可见,对待数学的情感是第一位的,而这却往往被忽略了。一说学数学,就注重于会算多少道题,一味地追求高度、难度,至于喜欢不喜欢从不加考虑,甚至“牛不喝水强按头”,这是数学教育中的最大失误。 没兴趣就不能主动养成好习惯,所以孩子的数学最容易落后别人一小步。同样,有兴趣有方法就会在轻松快乐中掌握,现在轻松超前一小步,将来就会超过别人几大步。 实际上《幼儿园教育指导纲要》中培养幼儿在数学方面的目标非常明确,也体现出了高度的重要性,只不过没有作业,让许多家长忽略了! 目标1,这是有关培养幼儿对数学的情感、态度的目标。 首先兴趣、好奇心、求知欲等是幼儿学习数学的内部动力。 其次,使他们爱学习、会学习。“学会学习”是当今基础教育的重要内容。目标2,有关幼儿学习数学知识方面的目标。 首先,该目标指出幼儿学习的数学知识包括数、形、量、时间和空间的感性经验,并逐步形成一些初级的数学概念。“数量关系是幼儿数学教育内容中起着发展思维作用的核心因素”。“ 其次,该目标指出幼儿是生活和游戏中感受到事物的数量关系,是在与环境的交互作用中获得有关数、量、形、时间、空间等的感性经验 目标3,这是有关培养幼儿认识能力,特别是发展思维能力的目标。 首先,该目标指出在幼儿数学教育中要重视认知能力的发展,尤其是思维能力的发展。 其次,这一目标还提出让幼儿学习用简单的数学方法解答生活和游戏中某些问题,能用适当方式表达、交流其操作、探索问题的过程和结果 幼儿学习解决问题,学习用适当方法表达和交流,这一过程不仅促进幼儿认识能力的发展,它还将促进幼儿自主性、创造力、想象力的发展,因为在这过程中,每个幼儿都可采用自己认为适当的方式去表达和交流。 目标4,这是有关培养幼儿正确使用数学材料的技能和良好学习习惯的目标。 首先,该目标提出了要培养幼儿正确使用数学操作材料的技能。 其次,该目标提出了培养幼儿良好的学习习惯的要求,要按规则进行活动,克服困难,探索解决问题的办法,能与别人合作进行游戏等。 童话数学启蒙篇完全符合《幼儿园教育指导纲要》中培养幼儿在数学方面的目标 童话数学启蒙篇,用故事讲数学,就像喜欢童话一样从小让孩子喜欢数学,轻易间、潜移默化地培养兴趣继而掌握数学。 童话数学启蒙篇,正如《纲要》中指出那样,“成为幼儿学习的支持者、合作者、引导者”,善于挖掘和发现幼儿感兴趣的事物,积极引导,令幼儿在数学的海洋里尽情游玩,不再让孩子们觉得数学是一种枯燥乏味的东西,而是一种很好玩、喜欢玩、想去玩的有趣的游戏! 产生对数学的情趣,幼儿一旦对学习感兴趣,就能对他产生积极的影响,促进迁移,终身受益,让孩子一生对数学的情感有极大的影响效应。 这就是最适宜于幼儿的童话数学启蒙篇 以数学知识作为童话的内容,这种数学,便成了童话数学;这种童话,便叫做数学童话。 童话数学的最大特点是数字、符号以及概念、法则等抽象的知识,都变得形象、具体、生动、活泼了。它们一个个会说话、会游戏、会做工„„本来孩子们认不清它们的面目、可是听它们说话、看它们游戏、做工,便自然而然地熟悉了它们。走进了童话,连孩子自己也变成了数字、符号、概念、法则,他们将在数学王国中愉快地观赏、游玩。 大家也许还记得,《西游记》中孙悟空与铁扇公主的故事。那孙大圣钻进了铁扇公主的肚子里,才打了胜仗。走进童话中学习数学,也如同钻进了数学的肚子里,从里向外才看得更清楚,那些混混沌沌的概念,奇奇巧巧的计算,怪模怪样的图形以至千变万化的问题,在数学王国的内部,都变得格外清朗了。 更有趣的是,童话里有饶有趣味的故事,有曲曲折折的情节,还有栩栩如生的人物。看它们举止动作,听它们交谈辩论,头脑中留下的印象便更深、更鲜明。 童话数学启蒙篇是一种“活的数学”,一种能从内心深处激发儿童想象力和激情的数学,一种在潜移默化中激发孩子各项潜能的幼儿童话教育系统与模式。如同童话、诗歌和绘画一样,在儿童丰富的精神世界里,数学也能找到它的一席之地。和童话、诗歌一样,善于点燃孩子想象的火花、善于激活孩子思维的萌芽。一个充满色彩、充满无限想象空间的数学世界正一步步向孩子们走来。 主动学习有兴趣、灵活运用增智慧、系统学习掌握牢、面向未来打基础。童话数学启蒙篇在教育部组织的专家鉴定中,被一致肯定为是一种新颖、独特、轻松有效的“学前儿童及一年级小学生数学童话教育系统与模式”,其原理尊重和顺应广大学前儿童的心理特点和接受习惯。将系统的幼儿园大班及小学一年级数学知识与生动的童话故事、精彩的卡通片、有趣的童话数学练习册和精彩的数学游戏自然、巧妙地结合在一起,充分调动幼儿学习数学的兴趣、积极性、主动性和参与性。不仅真正变被动学习为主动学习,而且使孩子愿意通过富有竞争性的趣味游戏反复复习巩固,使孩子们在很短的时间内轻松快乐的系统掌握应有的数学知识,最终达到在快乐中健康成长、掌握知识、提高素质的理想效果。 4、童话数学的作用 为什么童话数学启蒙篇,特别适用于幼儿园大班的孩子? 童话数学,数学的童话,其启蒙篇特别适合幼儿园大班的小朋友学数学,由清华大学倾情打造、开发,依据国家教育部制定的幼儿园大班及小学一年级数学教学大纲,充分考虑到幼儿园与小学的有机衔接,完全符合新课程标准,综合众多教育学专家、心理学专家、儿童文学作家和一线幼儿及小学一年级数学老师的经验与智慧,教育部鉴定通过,最新成果不断升级。 童话数学四大法宝之一的童话故事卡通片正是将数学枯燥的知识有机的融于童话故事中,以生动有趣的形象展现出来,使幼儿在反复的潜移默化中掌握数学,是非常符合这个年龄段的幼儿的生理和心理的认知特质的。 童话数学启蒙篇中的卡通片让孩子在数学童话故事的海洋里充分发挥想像,不断拓展孩子的思维,而且把枯燥的数学有趣化,让孩子觉得数学好玩又有趣。由于幼儿擅长故事记忆,能驾驭、把握故事,从而产生对数学良好的学习情趣,把童话故事和数学有机地结合了起来,在数学的思维空间里理解故事中主人公发生的矛盾,从中领悟数学的价值与意义。 为什么要让幼儿学数学?入学前让孩子接触数学有什么意义呢? 为入小学做准备,当然有这方面的作用,但这不是主要的,根本的意义是:然孩子从小潜移默化地热爱数学,开发潜能。 怎样让幼儿亲近数学呢? 既要有外在的引导与激发,更有内在的兴趣,用有趣的方式吸引孩子是必要的,从根本来说,是要培养孩子对数学本身发生兴趣,对数字有好感,对运算有积极性。其实小孩子不会天生地喜欢数学或厌恶数学,他们对世界充满好奇,其中也包括数、形、量,关键是他们接触的时候有没有良好的感觉。 童话数学是如何让幼儿对数学有良好的感觉的? 非常简单,就是玩数学,觉得数学是好玩的,自然就喜欢了。《童话数学》 启蒙篇中既有数学童话卡通片又有简易、有趣、好玩的数学游戏,寓教于玩,只要是可以用具体事物表达出来的数学概念,都可以借着这种游戏让孩子毫不费力地认识到,真是事半功倍。凡是使用过《童话数学》启蒙篇的幼儿入学后,对数学的学习驾轻就熟,成绩斐然,自然不会有当今许多学生数学成绩不好的头痛问题! 童话数学如何使幼儿获得学习数学的乐趣,并喜爱上数学呢? 著名心理学家布鲁纳说过:“学习的最好刺激乃是对教学材料的兴趣。”可见将数学知识融入生动有趣的童话中,符合幼儿好奇、好胜和以形象思维为主的心理特点 《童话数学》启蒙篇不但有卡通片,而且还有系统的课程让孩子从了解数学是日常生活的一部分、随处可见、随处都可用到开始,循序渐进地引导孩子,孩子在玩数学、在学习过程中没有任何压力,潜移默化地获得了学习数学的乐趣,并喜欢、热爱上数学。 致孩子们的宣传册的内容(显出企业的人性化): 童话数学 启蒙篇 童话故事卡通片目录 第一部 启蒙篇 海底探险(对应小学一年级及学前数学知识) 第1集:神秘数字 第6集:巧过鬼门关 第2集:数字花 第7集:数字网 第3集:算术陷阱 第8集:数盘里的秘密 第4集:魔牌 第9集:神秘出口 第5集:魔鬼15 第10集:地下冰洞 童话数学 启蒙篇 童话学习系统游戏目录 1、分类与比较游戏——多得啦购物13、20以内数的加、减法游戏——神射手 2、基数与序数游戏——π娃找怪兽 14、认识基本几何图形游戏——π娃拼图 3、奇数与偶数游戏——数字塔 15、整十数计算游戏——活捉方体怪 4、基本数学符合游戏——怪兽与小精灵 16、人民币知识游戏——理财能手 5、5以内数的分解组合游戏——数字跷跷板17、100以内数的加法游戏——灌篮高手 6、6和7的分解组合游戏——魔毯上的朋友 18、时间知识游戏——智救精灵王 7、6~10的数的分解组合游戏——数字花19、100以内数的减法游戏——七个小矮人 8、10以内数的加法游戏——数字塔桥竖式20、100以内数的加、减计算游戏—巨头翁 9、区分数位游戏—— 魔牌的秘密 21、带括号的加、减计算游戏——密室重生 10、加、减法关系游戏——魔牌大王的考题 22、简单应用题游戏——闯入魔窟 11、20以内数的加法游戏——算术陷进 23、凑十游戏——凑十方块 12、认识立体图形游戏——洞口小精灵24、20以内数的混合计算游戏——20之迷 图文并茂,主要的是插入个别游戏,卡通故事,而没给出全部的,要的效果是小孩子看后吵着父母想要买全篇!现场成交率大大提升了。潜在客户也将由此产生。第四篇:整理可玩拓展游戏
第五篇:数学游戏