- 博客(898)
- 资源 (13)
- 收藏
- 关注
原创 GESP编程等级认证C++三级9-字符串2
本文介绍了C++中输入字符串的两种方法:cin和getline。cin在遇到空格时会停止输入,而getline可以读取包含空格的完整字符串。文章还通过代码示例展示了这两种方法的使用,并提醒使用getline时需要包含string头文件。此外,文章解析了2024年12月和6月的几道真题,涉及字符串下标越界、字符遍历及ASCII编码值的计算等内容,帮助读者理解字符串处理中的常见问题。
2025-05-23 17:10:23
719
原创 GESP编程等级认证C++三级8-字符串1
在C++中,字符串是一种基本数据类型,使用string表示。字符串变量可以通过直接赋值或使用构造函数来定义,如s1和s2均被初始化为"hello"。字符串中的单个字符可以通过下标访问,例如s1[2]将返回'l'。需要注意的是,字符串的下标范围是0到长度减1,访问超出此范围的下标会导致“越界”错误。字符串末尾隐式包含结束字符\0,访问此字符不会越界但无法打印。通过length()或size()函数可以获取字符串中字符的个数,不包括结束字符。使用for循环可以遍历字符串中的所有字符,循环变量
2025-05-23 17:08:56
535
原创 GESP编程等级认证C++三级6-字符、字符数组与字符串1
在C++中,字符和字符串是基本的数据类型,但它们在内存中的表示和存储方式有所不同。字符(char)用单引号包围,占1个字节,存储的是字符的ASCII值。字符串(string)由多个字符组成,用双引号包围,末尾隐式包含一个结束符'\0',因此其内存占用比字符多。字符数组是字符的集合,可以通过字符串进行初始化,但需注意字符串末尾的'\0'会占用一个数组元素的位置。理解这些差异对于正确处理字符和字符串操作至关重要。
2025-05-22 10:35:36
324
原创 GESP编程等级认证C++三级7-字符、字符数组与字符串2
使用字符串定义字符数组虽然需要额外考虑末尾的“\0”,但这种方法在实际应用中具有显著优势。通过字符串初始化的字符数组(如a4)能够正确打印,因为“\0”作为字符串结束标志,使得输出函数在遇到“\0”时停止。而直接初始化的字符数组(如a7)由于缺少“\0”,会导致输出函数继续打印内存中的随机数据,产生乱码。此外,使用strlen()函数获取字符数组长度时,不包含“\0”,而sizeof()则包含“\0”。这些特性在处理字符串时提供了便利和准确性,尽管看似“麻烦”,但实际应用中不可或缺。
2025-05-22 10:33:25
626
原创 GESP编程等级认证C++三级5-数组5
本文讨论了C++中数组的赋值、定义及遍历方法。首先,数组不能直接赋值,需通过for循环逐个元素赋值。其次,全局数组和局部数组在未初始化时,全局数组元素默认为0,局部数组元素值不确定。此外,for循环可用于正向或逆向遍历数组。最后,通过真题解析展示了数组操作的实际应用,包括元素赋值、条件判断及输出。这些知识点对理解和使用数组至关重要。
2025-05-21 09:49:30
583
原创 GESP编程等级认证C++三级4-数组4
本文主要探讨了数组在内存中的存储方式及其所占内存空间的计算方法。数组元素在内存中是顺序且连续存储的,因此数组的总内存空间等于其所有元素所占空间的总和。通过示例代码,展示了如何定义数组并计算其内存空间,例如一个包含6个整型元素的数组,每个整型占4字节,总内存空间为24字节。此外,文章还介绍了如何使用sizeof()函数获取数组和基本数据类型的内存大小,并基于此计算数组中的元素个数。最后,通过真题解析,进一步巩固了数组内存空间计算的相关知识。
2025-05-21 09:47:05
449
原创 GESP编程等级认证C++三级3-数组3
数组中的元素可以通过下标访问,下标表示元素在数组中的编号,范围从0到(元素个数-1)。数组在内存中是连续存储的,因此通过下标可以快速定位元素。使用下标访问时需注意不能越界,否则可能获取到错误或不确定的值。通过for循环可以遍历数组中的元素,循环变量的值必须在下标范围内。真题解析中强调了避免下标越界的重要性,并指出数组初始化时默认值为0。
2025-05-20 12:29:59
402
原创 GESP编程等级认证C++三级2-数组2
文章摘要:本文介绍了数组初始化的方法及注意事项。一般方法要求在定义数组时指定长度,并通过大括号内的元素值进行初始化,元素值的数量需与数组长度一致。扩展方法包括省略数组长度初始化、自动补零初始化和全部元素为零的初始化。省略长度时,数组长度由元素值数量决定;元素值少于长度时,未指定元素自动补零;使用空大括号可将所有元素初始化为零。文章还通过真题解析,强调了数组定义时需指定长度或元素值,且长度必须为整型。
2025-05-19 10:30:45
309
原创 GESP编程能力等级认证C++3级1-数组1
GESP(CCF编程能力等级认证)为青少年提供编程能力验证,覆盖中小学阶段,分为C++编程一至八级。C++三级知识点包括数组的定义与使用,强调数组长度必须为正整数、常量或常量表达式,不能为变量或非正数。真题解析展示了如何正确定义数组及常见错误。GESP旨在提升青少年编程素养,培养解决实际问题的能力,并为学员提供编程能力证明。
2025-05-18 19:09:44
321
原创 从零开始学Python游戏编程50-二维数组4
property 是Python的内建装饰器,用来将方法“变身”成属性。通俗一点讲,它让你能够像访问属性一样,直接调用方法,而不必写那些冗长的 getter 和 setter 方法。你可以通过 @property 来控制属性的读取、修改和删除等操作,实现更细致的权限管理。它不仅让代码看起来更简洁,还能提升代码的可读性,避免过多的重复代码。用它,像是给代码装上了魔法引擎,让你在方法和属性之间轻松穿梭,打造出更优雅、简洁的编程风格。
2025-05-07 11:36:02
44
原创 从零开始学Python游戏编程49-二维数组3
在UserInterface类中,定义显示“小背景”的方法renderGround(),如图14所示。图14 显示“小背景”的方法renderGround()的代码其中,第100行中renderGround()的position参数表示“小背景”在游戏窗口中的位置;tile参数表示使用游戏背景图片集中的哪一块“小背景”;renderGround()的实现原理与renderUnit()相同。
2025-04-30 13:13:40
430
原创 从零开始学Python游戏编程46-类的继承3
其中,第85行中函数的参数unit表示要绘制的“单位”,可以是玩家坦克也可以是防御塔,因为玩家坦克和防御塔具有相同的属性。第86行代码确定绘制的“单位”在游戏窗口中的位置;第92-94行代码绘制了“单位”的上半部内容(武器部分),第92行中的Vector2(0,6)表示上半部内容是图片集中第7行第1列的图片,如图6所示。UserInterface类的render()方法用于绘制玩家坦克和防御塔,在该方法中,调用renderUnit()来实现绘制功能,代码如图7所示。图6 “单位”的武器部分示意图。
2025-04-29 11:26:12
55
原创 从零开始学Python游戏编程44-类的继承1
其中,第22行定义了一个列表computations,该列表中包含了Computation类的实例(Sum类和Product类都是Computation类的子类)的实例。第14行中,类名Sum后圆括号中的Computation表示定义的Sum类是Computation的子类,子类Sum类继承了父类Computation的所有属性和方法,因此在Sum类中无需再定义这两个整型属性。对于Sum类和Product类来说,其相同的功能是都包含两个整型属性,不同的功能是对这两个属性的操作。图1 Sum类的代码。
2025-04-29 09:46:56
121
原创 从零开始学Python游戏编程43-列表3
通过列表,改写提到的代码。将游戏中的多个防御塔数据写入到列表中,之后在处理玩家坦克与防御谈碰撞以及显示防御塔时,使用列表可以简化代码。
2025-04-28 10:01:53
50
原创 从零开始学Python游戏编程42-列表2
其中,第9行代码中,通过enumerate()函数获取mylist中元素的下标及元素的值,通过for循环遍历所有,index表示下标,item表示值。在“1.2 访问列表中的数据”中提到,可以通过列表的下标来查看列表中的单个数据。查看列表中所有的数据,叫做“遍历列表”,可以通过for循环遍历列表,代码如图12所示。如果我们需要直到每个数据对应的下标,也就是要同时获取列表中的下标和数据时,可以通过enumerate()函数实现,代码如图14所示。通过下标可以修改列表中的数据,代码如图10所示。
2025-04-27 10:06:00
493
原创 从零开始学Python游戏编程41-列表1
在Python中,列表(list)能够用来存储和处理数据,例如可以将中提到的防御塔位置的数据放到列表中。
2025-04-27 10:04:58
331
原创 从零开始学Python游戏编程40-碰撞处理2
newTankPos可以看作是坦克“理论上”的新位置,“理论上”的新位置指的是只有某些条件满足时,坦克才会出现在新位置上,第24-26行就指定了这些条件,包括坦克的位置必须在游戏窗口范围内,并且新位置不能在两个防御塔的位置上,满足以上条件,第27行才会将坦克的位置设置为新位置,否则坦克的位置不会改变。从图2中可以看出,防御塔实际上是图4中第2行第1列的图像与第7行第1列图像的组合,绘制防御塔的代码只需要将图5中绘制完整坦克代码中相应的行列坐标改为防御塔所需的行列坐标即可,在render()方法中。
2025-04-25 17:02:46
727
原创 从零开始学Python游戏编程39-碰撞处理1
在代码的基础上,添加两个敌人的防御塔,玩家的坦克无法移动到防御塔所在的空格中,如图1所示。图1 游戏中的碰撞处理。
2025-04-25 16:59:16
405
原创 从零开始学Python游戏编程38-精灵5
第70行中定义的变量texturePoint表示要绘制的贴图在贴图集中的位置,Vector2(1,0)表示贴图位于贴图集的第1行,第2列(Vector2的第一个参数表示列数,第二个参数表示行数,都是从0开始的),其示意图如图10所示。render()方法的作用是根据tankPos在游戏窗口中绘制坦克精灵,在绘制坦克精灵时,需要确定的数据是坦克精灵所在空格的左上角横纵坐标,以及绘制要绘制的贴图在贴图集中的位置,代码如图8所示。其它部分的代码与“矩形移动”游戏中的代码相同,请参考下一节的完整代码。
2025-04-24 11:53:52
355
原创 从零开始学Python游戏编程37-精灵4
第57-58行,当玩家点了向左的箭头按键,此时将moveTankCommand中表示列数的属性x设置为-1,表示坦克向左移动1格;在UserInterface类的__init__()方法方法中,主要不同是根据图2中的空格行列数设置游戏窗口的大小,并且将移动坦克精灵的指令moveTankCommand设置为Vector2类型,代码如图5所示。update()方法的主要作用是根据移动坦克指令moveTankCommand,更新坦克精灵的所在行列数,即更新坦克精灵的位置,代码如图7所示。
2025-04-24 11:52:18
963
原创 从零开始学Python游戏编程36-精灵3
在学习了如何显示坦克精灵后,我们将《从零开始学Python游戏编程33-指令模式2》中通过指令模式实现的“矩形移动”游戏改为“坦克移动”,即通过键盘控制坦克的移动。“坦克移动”游戏的效果如图1所示。图1 “坦克移动”游戏的效果。
2025-04-24 11:50:48
667
原创 从零开始学Python游戏编程35-精灵2
还可以通过pygame.math.Vector2类的实例来表示位置,在后面的内容中会看用这种方法表示位置带来的好处,代码如图6所示。范围信息一般包括四个数据,左上角横坐标,左上角纵坐标,宽度和高度,这四个数据确定后,贴图的范围也就确定了,如图7所示。其中,rectanlge是pygame.rect.Rect类的实例,64和0分别表示贴图左上角横纵坐标,后面的两个64分别表示贴图的宽度和高度。从图7中可以看出,如果要显示贴图集中绿框范围内的贴图,只需要指定该绿框范围的四个信息即可。图7 贴图的范围信息。
2025-04-23 11:29:25
387
原创 从零开始学Python游戏编程34-精灵1
精灵(sprite)也就是精灵对象,就是游戏中的一个具有行为的元素。以超级玛丽为例,玛丽,敌人都算是一个精灵对象。
2025-04-23 11:27:29
402
原创 从零开始学Python游戏编程33-指令模式2
在中提到的“移动矩形”游戏中,游戏数据(状态)与游戏界面都是在Game类中定义的,本着模块功能越简单越好的原则,可以将,游戏数据(状态)与游戏界面分离,即新创建一个表示游戏数据(状态)的类。
2025-04-22 12:52:13
483
原创 从零开始学Python游戏编程32-指令模式1
使用指令模式可以将处理玩家的输入和更新游戏数据的代码分离。使用指令模式,在处理玩家输入的函数processInput()中,对于玩家的不同输入,此时不是直接修改游戏数据,而是将玩家的输入作为修改游戏的指令保存起来;在更新游戏数据的函数update()中,再根据已经保存的修改游戏数据的指令,来修改游戏数据。
2025-04-22 10:48:47
802
原创 从零开始学Python游戏编程31-类3
其中,图12所示的代码可以看作是整个游戏的主程序,当游戏代码运行后,首先执行的是第48行所示的代码。第49行通过实例game调用run()方法运行游戏;其中,第43行控制while循环的是实例属性running,在图7所示的__init__()方法中定义;第44-46行代码分别调用了processInput()、update()和render()方法;在定义了游戏循环模式Game类之后,通过实例化该类,实现游戏的运行,代码如图12所示。run()方法的作用是在while循环中调用以上方法,运行游戏。
2025-04-18 16:54:46
512
原创 从零开始学Python游戏编程30-类2
游戏状态和游戏数据的init()函数,用来处理玩家通过键盘、鼠标以及手柄的输入信息的processInput()函数;其中,第39行中的self.window表示实例的window属性,该属性在图7所示的__init__()方法中定义,表示游戏窗口,该行代码的作用是设置游戏窗口的背景色;对于“移动矩形”的游戏来说,游戏数据是矩形左上角的横纵坐标x和y,这两个数据在processInput()方法中已经进行了更新,因此对于update()方法,使用pass表示该方法不做任何动作,代码如图9所示。
2025-04-18 16:53:40
500
原创 从零开始学Python游戏编程28-监听键盘4
其中,第6行代码通过pygame.image模块中的load()函数导入图标图片,该函数的参数即为图片名;第7行代码通过pygame.display模块中的set_icon()函数重新设置游戏的图标,该函数的参数是导入的图片变量。其中,通过pygame.display模块中的set_caption()函数设置游戏的标题,该函数的参数即为修改后标题的新内容,代码运行效果如图7所示。当游戏运行后,左上角会显示游戏标题和图标,如图5所示。通过图6所示代码修改游戏的标题。设置游戏图标的代码如图8所示。
2025-04-16 10:55:45
332
原创 从零开始学Python游戏编程27-监听键盘3
依然假设大概每5毫秒运行一次while循环,那么产生60帧所需的时间为60×5=300毫秒,则在1秒钟之内,该游戏释放了1000-300=700毫秒的CPU占用时间。运行设置帧率后的游戏,通过“设备管理器”可以看到,内存、CPU以及电源资源的占用率大大减少了。中的移动矩形的游戏中,没有设置帧率,此时的游戏会尽可能多地产生帧,而这些过多的帧无法在显示器中显示出来,浪费了电脑资源。移动矩形的游戏运行后,通过电脑的“设备管理器”可以看到,该游戏占用了大量的内存、CPU以及电源资源,如图1所示。
2025-04-16 10:54:13
437
原创 从零开始学Python游戏编程26-监听键盘2
第15-16代码表示,当玩家点击了向左的方向键时,将矩形左上角的横坐标减少8,达到向左移动矩形的效果。17-18行表示玩家点击了向右的方向键的处理,第19-20行表示玩家点击了向上方向键的处理,第21-22行表示玩家点击了向下方向键的处理。其中,K_ESCAPE是“Esc”按键的event.key,当玩家点击该按键后,将循环控制标志设置为False,循环结束后,游戏退出。要想让玩家可以通过键盘上的方向按键移动矩形,则需要对键盘上的方向按键进行监听,代码如图9所示。图11 点击“Esc”按键退出游戏的代码。
2025-04-15 10:54:35
396
原创 从零开始学Python游戏编程25-监听键盘1
移动矩形的位置,实际上就是要改变矩形左上角的横纵坐标。因此,首先需要将矩形左上角的横纵坐标定义为常量,代码如图6所示。图6 定义矩形左上角的横纵坐标的代码其中,x表示横坐标,y表示纵坐标。注意2 在while循环之前定义矩形左上角的横纵坐标。
2025-04-15 10:52:35
697
原创 从零开始学Python游戏编程24-Pygame库4
(0,0,255)是以元组的方式表示颜色的RGB值,元组中的第一个元素表示R(Red红色),第二个元素表示G(Green绿色),第三个元素表示B(Blue蓝色),每个元素的取值范围是0-255,0表示颜色最弱,255表示颜色最强,(0,0,255)表示R是0,G是0,B是255,即纯蓝色;第三个参数(120,120,400,240)是一个包含了四个元素的元组,表示矩形的位置和大小,其中前两个元素120表示矩形左上角的坐标,left=120,top=120,通过这个坐标,可以确定矩形的位置;
2025-04-14 10:45:28
376
原创 从零开始学Python游戏编程23-Pygame库3
如果玩家按下了关闭按键,第11行代码将控制循环的标志running设置为False,第7行中的while循环结束,程序退出。中提到,通过pygame.event.poll()函数获取事件队列中的事件,但是使用该函数一次只能获取一个事件,玩家按键的事件可能会隔一段时间才能被处理,导致游戏出现延迟。其中,第8行代码,通过pygame.event.get()函数获取事件队列中的所有事件,并将这些事件以列表的格式保存到变量eventList中,接下来,在Pygame编程框架代码的基础上,编写一个绘制矩形的代码。
2025-04-14 10:43:43
343
原创 从零开始学Python游戏编程21-Pygame库1
在Python游戏编程中,我们主要使用的是Pygame库,该库主要用于编写2D游戏。但是在Spyder中并没有自带Pygame库,需要通过指令进行安装。
2025-04-11 11:37:05
291
原创 从零开始学Python游戏编程20-游戏循环模式2
第49行代码通过render()函数显示更新后的游戏状态和游戏数据。该函数中,根据playerNumber和magicNumber的关系,设置gameStatus,即完成了游戏状态的更新,最后以元组的方式返回更新后的游戏状态和游戏数据。update()函数的作用是根据玩家输入来更新游戏状态和游戏数据,因此该函数的参数有三个,分别表示游戏状态、游戏数据和玩家输入,代码如图5所示。render()函数的作用是显示更新后的游戏状态和游戏数据,因此该函数的参数有两个,分别表示游戏状态和游戏数据,代码如图6所示。
2025-04-10 16:16:39
1026
基于IOAPIC重定位的 键盘监听技术及防御
2017-03-27
Windows文件系统过滤驱动开发教程(第二版)
2017-04-23
基于VS2015套接字完成端口模型源代码
2018-07-04
ddkwizard_setup_v1.2.0a及ddkward.cmd
2016-10-23
基于对话框程序的注册码快捷键粘贴功能的实现
2017-04-23
VS2008编译驱动程序的配置方法
2016-10-23
Windows7下VS2008维护模式破解工具.rar
2019-05-31
filespy源代码
2016-09-25
DirectDraw中文手册
2017-01-31
Windows Graphics Programming Win32 Gdi And Directdraw.chm
2017-01-31
黑客调试技术解密pdf
2016-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人