一、该源码的出处

以下所有的内容都来自于Python编程:从入门到实践(此书有电子版,若需要电子版,可在我的下载中查看到相关信息),该编码的源码也可以在我的下载中查看

二、为什么写?

因为书上的很多内容可能会忘记,所以直接在敲源码的途中将一些需要记住的点还有一些需要理解的点以注释的方式呈现了出来

三、项目讲解

(1)讲一下项目

这个项目是外星人入侵游戏三章中的其中一章,最后实现的结果是在屏幕上有一辆飞船可以左右移动(在移动的时候不能移出屏幕而且要可以连续移动),并可以发射子弹(限制发射的子弹数)

(2)从项目中学习到的点

游戏开发计划的指定
使用Pygame编写的游戏的基本机构
设置背景色,以及如何设置存储在可供游戏的各个部分访问的独立类中
在屏幕上绘制图像,以及如何让玩家控制游戏元素的移动
如何创建自动移动的元素(子弹)
如何定期重构项目的代码

(3)自己的总结

从该项目中学到了很多东西,真正实践到做一个完整的项目应该注意的点。比如定义(可以设置一些经常设置的变量在一个类中,这样容易修改,设置其他的变量的时候如果在函数中需要注意self的使用,变量需要能够看懂,设置类的存储的时候也要注意之后的使用,用一些方法创建的图像的时候最好将其赋给一个变量)、函数(函数的调用真的是非常重要,但是要注意函数中的self以及函数间彼此的调用)、传参(传参数不需要一次性传完,需要慢慢传,因为要添加东西,所以可以根据你的需要再添加参数)、类与类(重构中最重要的就是类与类之间的联系,尽量将主程序文件中的内容缩短)

四、说明

输出源码前,我想先说明以下几点
(1)我使用的语言是python
(2)我使用的IDE是Pycharm
(3)该项目一共包含5个py文件,以及一张图片,如下图

五、源码

(1)alien_invasion.py

#该主文件创建一系列整个游戏都要用到的对象:存储在ai_settings中的设置、存储在screen中的主显示surface以及一个飞船实例
#还包含游戏的主循环,这是一个调用check_events()、ship.update()和update_screen()的while循环
#整个游戏只需要运行该文件,其他文件包含的代码被间接或直接的导入到这个文件中
#创建Pygame窗口以及响应用户输入
import sys
import pygame
from ship import Ship
from settings import Settings
import game_functioins as gf
from pygame.sprite import Group
def run_game():#初始化游戏并创建一个屏幕对象pygame.init()   #初始化背景设置,让Pygame能够正确工作#我们导入了Settings类,这里创建了一个Settings实例,并将其存储在ai_settings中ai_settings = Settings()screen = pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))#  (ai_settings.screen_width,ai_settings.screen_height))pygame.display.set_caption("Alien Invasion")#创建一艘飞船#这里之所以要将形参添加到这里,原因是因为在ship中的Ship函数中添加了形参ship = Ship(ai_settings,screen)#创建一个用于存储子弹的编组#创建了一个Group实例,并将其命名为bullets# 这个编组是在while循环外面创建的,这样就无需每次运行该循环时都创建一个新的子弹编组#我们将bullets传递给了check_events()和update_screen()#在check_events()中,需要玩家按空格键时处理bullets#在update_screen()中,需要更新要绘制到屏幕上的bullets#当编组调用update()时,编组将自动对其中的每个精灵调用update()# 因此代码行bullets.update()将为编组bullets中的每颗子弹调用bullets.update()bullets = Group()"""#个人理解:设置屏幕的高低以及左上角名称# 实参(1200,800)是一个元组,指定了游戏窗口的尺寸#对象screen是一个surface,surface是屏幕的一部分,用于显示游戏元素#在这个游戏中,每个元素都是一个surface# display.set_mode()返回的surface表示整个游戏窗口#激活游戏的动画循环后,每经过一次循环都将自动重绘这个surfacescreen = pygame.display.set_mode((1200,800))pygame.display.set_caption("Alien Invasion")""""""#个人理解:设置整个游戏的背景颜色#设置背景色#该颜色只需指定一次,因此在主while循环前定义它#在Pygame中,颜色是以RGB值指定的#(255,0,0)红色,(0,255,0)绿色,(0,0,255)蓝色,(230,230,230)灰色bg_color = (230,230,230)"""#开始游戏的主循环#如果在循环内部创建编组,游戏运行时将创建数千个子弹编组,导致游戏慢的像蜗牛#如果游戏停滞不前,很有可能是主while循环中发生的情况while True:#调用鼠标点击#游戏中发生的情况:检查玩家的输入gf.check_events(ai_settings,screen,ship,bullets  )#飞机的位置将在检测到键盘事件后(但在更新屏幕前)更新#这样,玩家输入时,飞船的位置将更新,从而确保使用更新后的位置将飞船绘制到屏幕上#游戏中发生的情况:更新飞船的位置ship.update()#游戏中发生的情况:所有未消失的子弹的位置gf.update_bullets(bullets)"""将子弹管理代码移到game_functions中,让主程序文件尽可能简单bullets.update()#子弹抵达屏幕顶端后消失,这仅仅是因为Pygame无法在屏幕外面绘制它们#它们的y坐标为负数,且越来越小,这是个问题,因为它们将继续消耗内存和处理能力#  删除已消失的子弹#在for循环中,不应从列表或编组中删除条目,因此必须遍历编组的副本,使用方法copy()for bullet in bullets.copy():#判断其是否到达了顶端,并在bullets中将其删除if bullet.rect.bottom <= 0:bullets.remove(bullet)#验证上述三行代码是否有效,可以print一下,应该是最终都会归于0#验证完之后就要将其print删除,因为会使游戏速度大大降低#因为输出写入到中断而花费的时间比将图形绘制到游戏窗口花费的时间还多#如果运行该语句会发现其数量一直更新,比如如果是0,会输出很多0#print(len(bullets))""""""#个人理解:当鼠标点击右上角关闭按钮时,该程序将退出#监视键盘和鼠标事件#为访问Pygame检测到的事件,我们使用方法pygame.event.get()#所有键盘和鼠标事件都将促使for循环运行for event in pygame.event.get():#玩家单击游戏窗口的关闭按钮时,检测到pygame.QUIT事件if event.type == pygame.QUIT:#调用sys.exit()退出游戏sys.exit()"""#游戏中发生的情况:更新后的位置来绘制屏幕gf.update_screen(ai_settings,screen,ship,bullets)"""#每次循环时都重绘屏幕#调用方法screen.fill(),用背景色填充屏幕#该方法只接受一个实参:一种颜色screen.fill(ai_settings.bg_color)ship.blitme()# 让最近绘制的屏幕可见# 在每次执行while循环时都绘制一个空屏幕,并擦去旧屏幕# pygame.display.flip()将不断更新屏幕,以显示元素的新位置# 并在原来的位置隐藏元素,从而营造平滑移动的效果pygame.display.flip()"""
run_game()

(2)settings.py

#该文件包含Settings类,这个类包含方法__init__(),它初始化控制游戏外观和飞船速度的属性
#写一个Settings的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置
#可以将之前在alien_invasion.py中写的相关配置删除
class Settings():def __init__(self):"""初始化游戏的设置"""# 屏幕设置self.screen_width = 1200self.screen_height = 800self.bg_color = (230,230,230)#飞船的设置(用于控制飞船的速度)#移动飞船时,将移动1.5像素#这里设置值的原因是因为飞船的移动速度会比以前快,能够将外星人射下来self.ship_speed_factor = 1.5#子弹设置#更新settings.py,在其方法__init__末尾存储类Bullet所需的值#设置创建宽3像素,高15像素的深灰色子弹,子弹的速度比飞船稍低self.bullet_speed_factor = 1self.bullet_width = 3self.bullet_height = 15self.bullet_color = 60,60,60#设置存储所允许的最大子弹数(为了鼓励玩家有目标的射击)self.bullets_allowed = 3

(3)ship.py

#文件ship.py包含Ship类,这个类包含方法__Init__()、管理飞船位置的方法update()以及在屏幕上绘制飞船的方法blitme()
#表示飞船的图像存储在文件夹Images下的ship.bmp中#为了绘制玩家的飞船,将加载一副图像,再使用pygame方法blit()绘制它
#在游戏中农可以使用任何类型的图像文件,但使用位图(.bmp)文件最简单
#因为pygame默认加载位图,而其他的文件类型需要再计算机上安装相应的图像库(一般默认都有)
#选择图像时,要特别注意其背景色,最好选择背景透明的图像
#需要将飞船的图像显示到屏幕上
#这里将创建ship类,负责管理飞船得大部分行为
import pygame
class Ship():#方法__init__接受两个参数,一个是self、一个是screen#screen指定了将飞船绘制到什么地方,为了加载图像,调用pygame.image.load()def __init__(self,ai_settings,screen):#初始化飞船并设置其初始位置self.screen = screen#添加了ai_settings,让飞船能够获取其速度设置#将形参ai_settings的值存储在一个属性中,以便之后在update中使用self.ai_settings = ai_settings#pygame的效率高的原因是因为让你能够像处理矩形一样处理游戏元素,即便它们的形状并非矩形#像处理矩形一样处理游戏元素之所以高效,是因为矩形是简单的几何形状#处理rect对象时,可以使用矩形四角和中心的x,y坐标#要将游戏元素居中,可设置相应rect对象的属性center、centerx、centery#要让游戏元素边缘对齐,可使用属性top、bottom、left、right#要调整游戏元素的水平或垂直位置,可使用属性x和y,分别是相应矩形左上角的x和y左边#以上属性让你无需去做游戏开发人员原本手工完成的计算#加载飞船图像并获取其外接矩形#load这个函数返回一个表示飞船的surface,将这个surface存储到self.imageself.image = pygame.image.load('image/ship.bmp')#加载图像后,使用get_rect()获取相应surface的属性rectself.rect = self.image.get_rect()#将表示屏幕的矩形存储在self.screen_rect中#这里的self.screen_rect是整个屏幕self.screen_rect = screen.get_rect()#将每艘新飞船放在屏幕底部中央#pygame将使用这些rect属性来放置飞船图像,并将其与屏幕下边缘对齐并水平居中#将self.rect.centerx(飞船中心的x坐标)设置为表示屏幕的矩形的属性centerx#其center与下方的bottom可以共同控制飞船的位置#centerx表示飞船的x坐标位于屏幕中间,centery表示飞船的y坐标位于屏幕中间self.rect.centerx = self.screen_rect.centerx#将self.rect.bottom(飞船下边缘的y坐标)设置为表示屏幕的矩形的属性bottom#如果同时设置了centery和bottom,呢么会以bottom为主self.rect.bottom = self.screen_rect.bottom#在飞船的属性center中存储小数值#鉴于现在调整飞船的位置时,将增加或减去一个单位为像素的小数值#因此需要将位置存储在一个能够存储小数值的变量中。#可以使用小数来设置rect的属性,但rect将只存储这个值的整数部分#所以定义了一个可存储小数值的新属性self.center = float(self.rect.centerx)#不断移动,飞船不动时,标志movimg_right为false,玩家按下右箭头键时,将这个标志设置为true#而玩家松开时,将这个标志重新设置为false#移动标志self.moving_right = Falseself.moving_left = False#检测标志moving_right的状态def update(self):#根据移动标志调整飞船的位置#这里之所以使用了两个if语句,而不是elif的原因是因为如果同时按下左右键,用if-elif会比较不准确#用两个if的话,同时按下左右键时,会先增大,再歼敌#如果使用if-elif的话,右箭头将始终处于优先地位,则将一直向右移动#if self.moving_right:# 更新飞船的center值,而不是rect值#self.rect.right返回飞船外接矩形的右边缘的x坐标#如果这个值小于self.screen_rect.right,呢么说明没有触及屏幕右边缘if self.moving_right and self.rect.right < self.screen_rect.right:#将self.center的值增加或减去ai_settings.ship_speed_factor#更新后,再根据它来更新控制飞船位置的self.rect.centerxself.center += self.ai_settings.ship_speed_factor# self.rect.centerx += 1#if self.moving_left:#如果rect的左边缘的x坐标大于0,就说明飞船未触及屏幕左边缘#确保当飞船在屏幕内时,才会调整self.center的值if self.moving_left and self.rect.left > 0:self.center -= self.ai_settings.ship_speed_factor# self.rect.centerx -= 1#根据self.center更新rect对象self.rect.centerx = self.centerdef blitme(self):#在指定位置绘制飞船#根据self.rect指定的位置将图像绘制到屏幕上self.screen.blit(self.image,self.rect)

(4)game_function.py

#在大型项目中,经常需要在添加新代码前重构既有代码
#重构旨在简化既有代码的结构,使其更容易扩展
#该模块是为了存储大量让游戏运行的函数,通过创建该模块,可避免alien_invafsion.py太长,以及逻辑更好理解
#该文件包含一系列函数,游戏的大部分工作都是由它们完成的
#函数check_events()检测相关的时间,如按键和松开,并使用辅助函数check_keydown/up_events来处理这些事件,这些函数管理飞船的移动
#该模块game_functions还包含函数update_screen(),它拥有在每次执行主循环时都重绘屏幕import sys
import pygame
from bullet import Bullet#下面两个函数是将check_events中的部分内容复制到函数内,便于逻辑清晰
#修改修改该函数,因为在玩家按空格键时发射一颗子弹
#编组bullests传递给了check_keydown_events()
def check_keydown_events(event,ai_settings,screen,ship,bullets):#相应按键if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = True#将发射子弹的代码移到一个独立的函数中,这样,在该函数中,只需一行代码就可以发射#使elif代码变得简单elif event.key == pygame.K_SPACE:fire_bullet(ai_settings,screen,ship,bullets)def fire_bullet(ai_settings,screen,ship,bullets):#创建新子弹并将其加入到编组bullets中#玩家按空格键时,我们检查bullets的长度,如果len(bullets)小于3,就创建一个新子弹#但如果已有3颗未消失的子弹,则玩家按空格键时什么都不会发生if len(bullets) < ai_settings.bullets_allowed:#创建一颗子弹,并将其加入到编组bullets中#玩家按空格键时,创建一颗新子弹(一个名为new_bullet的Bullet实例),并使用方法add()将其加入到编组bullets中new_bullet = Bullet(ai_settings,screen,ship)#代码bullets.add(new_bullet)将新子弹存储到编组bullets中bullets.add(new_bullet)#因为玩家松开空格键时什么都不会发生,所以不需要修改以下函数
def check_keyup_events(event,ship):#相应松开if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = False#管理事件的代码放到check_events()函数中,以简化run_game()并隔离事件管理循环
#通过隔离事件循环,可将事件管理与游戏的其他方面(如更新屏幕)分离
#该模块需要导入sys、pygame,主程序文件中就不需要导入sys了
#该函数不需要任何形参,其函数体复制了alien_invasion.py的事件循环
#需要在主程序文件alien_invasion.py中将该事件循环替换为函数check_events()的调用
# 在函数中需要包含形参ship,因为在玩家按右箭头键时,需要将飞船向右移动
#在check_events()的定义中,我们需要修改形参bullets
def check_events(ai_settings,screen,ship,bullets):#响应按键和鼠标事件for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()#目前这种移动只可以移动1像素,并不可以持续移动elif event.type == pygame.KEYDOWN:#调用check_keydown_events()时,我们也需要将bullets作为实参传递给它check_keydown_events(event,ai_settings,screen,ship,bullets)"""#读取event.key确认按下的是右箭头键#设置在玩家按下右箭头键时将moving_right设置为true,在松开时,变为falseif event.key == pygame.K_RIGHT:#向右移动飞船#ship.rect.centerx += 1ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = True"""#玩家在松开右键时,将moving_right设置为false#这里有点难理解,大概的意思就是如果我没有按键,但是我之后按的是右键,那么将更改moving_right的值elif event.type == pygame.KEYUP:check_keyup_events(event,ship)"""#这里之所以使用了elif,是因为每个事件都只与一个键相关联,如果同时按下左右键,将检测到不同的事件if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = False"""#更新屏幕的代码
#此处需要传3个参数的原因是因为ai_settings是设置颜色的,screen是ai_settings中存储颜色的地方,ship是构造ship时需要使用期变量
#参数的顺序可以随意,但是要注意要和主程序文件中的所给的参数对应
#为了方便,该参数中的定义和主程序文件中的变量定义相同,此处也可以进行更改,但是要注意该函数下的所有参数都得进行更改
#给屏幕上绘制子弹的update_screen()添加了形参bullets,方法bullets.sprites()返回一个列表,其中包含编组bullets中的所有精灵
def update_screen(ai_settings,screen,ship,bullets):#更新屏幕上的图像,并切换到新屏幕#每次循环时都重绘屏幕screen.fill(ai_settings.bg_color)#在屏幕上绘制发射的所有子弹,我们遍历编组bullets中的精灵,并对每个精灵都调用draw_bullet()for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()pygame.display.flip()def update_bullets(bullets):#更新子弹的位置,并删除已消失的子弹#更新子弹的位置bullets.update()# 子弹抵达屏幕顶端后消失,这仅仅是因为Pygame无法在屏幕外面绘制它们# 它们的y坐标为负数,且越来越小,这是个问题,因为它们将继续消耗内存和处理能力#  删除已消失的子弹# 在for循环中,不应从列表或编组中删除条目,因此必须遍历编组的副本,使用方法copy()for bullet in bullets.copy():# 判断其是否到达了顶端,并在bullets中将其删除if bullet.rect.bottom <= 0:bullets.remove(bullet)

(5)bullet.py

#Bullet类继承了我们从模块pygame、sprite中导入的Sprite类
#通过使用精灵,可将游戏中相关的元素编组,进而同时操作编组中的所有元素
#为创建子弹实例,需要向__init__()传递ai_settings、screen和ship实例,还调用了super()来集成Sprite
import pygame
from pygame.sprite import Spriteclass Bullet(Sprite):#一个对飞船发射的子弹进行管理的类def __init__(self,ai_settings,screen,ship):#在飞船所处的位置创建一个子弹对象#super使用了python2.7语法,这种语法也使用于python3,也可以写成super().__init__()super(Bullet,self).__init__()self.screen = screen#在(0,0)处创建一个表示子弹的矩形,再设置正确的位置#创建了子弹的属性rect,子弹并非基于图像的,因此我们必须使用pygame.Rect()类从空白开始创建一个矩形#创建这个类的实例时,必须提供矩形左上角的x、y坐标,还有矩形的宽度和高度#我们在(0,0)处创建这个矩形,但之后的两行代码将其移到了正确的位置,因为子弹的初始位置取决于飞船当前的位置#子弹的宽度和高度是从ai_settings中获取的#ai_settings.bullet_width是调用settings.py中的内容self.rect = pygame.Rect(0,0,ai_settings.bullet_width,ai_settings.bullet_height)#将子弹的centerx设置为飞船的centerxself.rect.centerx = ship.rect.centerx#子弹应从飞船顶部射出,因此我们将表示子弹的rect的top属性设置为飞船的rect的top属性,让子弹看出是从飞船中射出的self.rect.top = ship.rect.top#存储用小数表示的子弹位置#将子弹的y坐标存储为小数值,以便能够微调子弹的速度self.y = float(self.rect.y)#将子弹的颜色和速度设置分别存储到self.color和self.speed_factorself.color = ai_settings.bullet_colorself.speed_factor = ai_settings.bullet_speed_factor#方法update管理子弹的位置,发射出去后,子弹在屏幕中向上移动,这意味y坐标不断减少#因此为更新子弹的位置,我们从self.y中减去self.speed_factor的值def update(self):#向上移动子弹#更新表示子弹位置的小数值#属性speed_factor让我们能够随着游戏的进行或根据需要提高子弹的速度#子弹发射后,其x坐标始终不变,因此子弹将沿直线垂直地往上穿行self.y -= self.speed_factor#更新表示子弹的rect的位置self.rect.y = self.ydef draw_bullet(self):#在屏幕上绘制子弹#需要绘制子弹时,我们调用draw_bullet()#函数draw.rect()使用存储在self.color中的颜色填充表示子弹的rect占据的屏幕部分pygame.draw.rect(self.screen,self.color,self.rect)

外星人入侵游戏源码及讲解(一)相关推荐

  1. python外星人入侵游戏代码_python外星人入侵 游戏源码

    [实例简介] [实例截图] [核心代码] #--coding:utf-8-- import pygame from pygame.sprite import Sprite class Alien(Sp ...

  2. 【开学了】整理各种常用功能的实现 | 小游戏源码分享

    暑假余额严重不足,还有两天就开学了,马上初三了学习任务很紧,不出意外摸不到手机电脑了.花点时间整理下学过的知识,算是对自己自学两年Creator的一个总结. 2D / 3D摇杆 三角函数详细讲解 | ...

  3. Unity游戏项目_3D迷宫(游戏源码免费)

    目录 一.效果图 二.讲解 三.资源分享 总结 一.效果图 游戏开始界面: 游戏画面: 游戏结束界面: 二.讲解 主要代码如下: 1.链接代码 using System.Collections; us ...

  4. VB6编程学习DX9游戏编程DirectX9编程2D小游戏源码冷风引擎CoolWind2D游戏引擎(1)

    前言 打开CSDN或者度娘(谷哥被墙了,搜索不了),关键词"VB6 dx9 DirectX9 游戏源码",你会发现,讲解DX9技术的文章很多,但是跟VB6都没什么关系.偶有几片文章 ...

  5. 飞行熊猫游戏源码android版

    这款游戏是前一段时间完成的一个项目,飞行熊猫游戏源码android版,飞行熊猫基于cocos2d游戏引擎开发,包括了谷歌admob广告支持,没有任何版权问题,大家可以自由修改和上传应用商店. 1.本游 ...

  6. ios水果风暴游戏源码项目下载

    这是一款ios水果风暴游戏源码下载,介绍给大家一下,喜欢的朋友可以下载学习一下吧. 应用介绍:这是一个以获得高分和挑战更高难度为目的的游戏.游戏中有九种不同的卡通水果,您可以交换屏幕中两个相邻水果的位 ...

  7. 基于html5制作3D拳击游戏源码下载

    今天给大家分享一款基于HTML5实现的3d拳王游戏源码.这款实例适用浏览器:360.FireFox.Chrome.Safari.Opera.傲游.搜狗.世界之窗. 不支持IE8及以下浏览器. 在线预览 ...

  8. Unity3D游戏-愤怒的小鸟游戏源码和教程(二)

    Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏 ...

  9. 比较不错的一个ios找茬游戏源码

    找茬游戏源码 ,这个是一款非常不错的ios找茬游戏源码,该游戏的兼容性非常好的,并且还可以支持ipad和iphone,UI界面设计得也很漂亮,游戏源码真的是一款非常完美,而且又很完整的一款休闲类的游戏 ...

最新文章

  1. 综合一2017.5.17
  2. Nginx学习之HTTP/2.0配置
  3. 同班同学20年后 身家15亿与月薪5000元的区别
  4. db9针232接口波特率标准_理解串口通信以及232,485,422常见问题
  5. apiclod 上传图片_Apicloud——关于上传图片、视频(二)
  6. 逻辑与计算机科学之间有什么联系,数学、逻辑与计算机科学的关系
  7. 计算机网络——网络安全
  8. React自定义视频全屏按钮
  9. sketch up rbs/rbz/rb插件安装方法
  10. 网线水晶头制作的线序
  11. 使用盒式布局实现登录界面
  12. 【SPSS】解决问题:因子分析计算KMO提示不是正定矩阵
  13. zuma族蚂网优化日志:SEO网站跳出率
  14. 【MySQL 09】安装mysql时出现:需要这两个包perl(Data::Dumper),perl(JSON)
  15. 北航计算机机试13真分数约分
  16. 我的ElasticSearch认证工程师之路
  17. AS608光学指纹模块
  18. 定义一个int型变量
  19. [对话CTO]当当网熊长青:兴趣是成为优秀工程师的第一因素-CSDN.NET
  20. maple 假设_maple 教程

热门文章

  1. 用vb编制一个计算机程序,VB程序题:编一模拟袖珍计算器的完整程序,界面如下图所示。要求:输入两个操作数和一个操作符,根据操作符决定所做的运算。 VB源码 龚沛曾...
  2. 【语音去噪】基于matlab低通滤波器语音去噪【含Matlab源码 1900期】
  3. AHP | 层次分析法原理及Python实现
  4. 深入理解Nginx~事件类配置项
  5. 基于SDN的蜜网技术概述
  6. 禁止Mac Safari下载zip文件后自动解压缩
  7. 安卓端gis_安卓系统的gis软件
  8. termux获取sd卡读写权限_索尼发布“世界最快”USB-C Hub及TOUGH SF-M系列SD卡
  9. 微信小程序关于键盘行为的探索
  10. 实际工作中遇到的技术难题与大家交流(工作流条件表达式计算部分),希望技术高手能给于指点