小学生python游戏编程arcade----坦克大战4

  • 前言
  • 坦克大战4
    • 1.1 每单元英语单词学完升级效果
    • 1.2 单词调用及敌坦克随机问题
    • 1.3 效果图
    • 1.4 代码实现
  • 源码获取

前言

接上篇文章继续解绍arcade游戏编程的基本知识。今天基本可玩了,让孩子试试

坦克大战4

1.1 每单元英语单词学完升级效果

1.2 单词调用及敌坦克随机问题

self.scene.add_sprite_list_after(LAYER_tanks, 'wj')if len(self.word_keys) == 0:if self.danyuan==len(self.gk[self.year]):self.level += 1self.year =self.years[self.level]else:self.danyuan += 1self.setup_word(self.danyuan, self.year)if len(self.word_keys) > 0:self.key = self.word_dict[self.word_keys[0]]  # 朋友# print('key',self.key)xsword = {}xsword[self.word_keys[0]] = self.word_dict[self.word_keys[0]]# 随机取3sankey = random.sample(self.word_dict.keys(), 3)if self.word_keys[0] in sankey:sankey.remove(self.word_keys[0])# 增加两个敌人xsword[sankey[0]] = self.word_dict[sankey[0]]xsword[sankey[1]] = self.word_dict[sankey[1]]# 增加随机坦克posx=[]random_x= random.random()*SCREEN_width/3for jj in range(3):tempx=random_x+400*jjif tempx>self.end_of_map:tempx=random.random()*SCREEN_width/2posx.append(tempx)random_y = random.random() * self.top_of_map / 3random.shuffle(posx)  # 打乱顺序# print(posx)j=0for x in xsword:tank = Enemy_tank("images/坦克2.png", 0.5, posx[j], random_y)tank.word = xtank.hz = xsword[x]self.scene.add_sprite(LAYER_tanks, tank)j +=1# 去掉已显示单词self.word_keys.remove(self.word_keys[0])# 增加子弹层self.scene.add_sprite_list_after(LAYER_bullet, 'wj')# 增加爆炸粒子列表self.scene.add_sprite_list_after(LAYER_explosions, 'wj')

1.3 效果图


1.4 代码实现

from arcadegame.guigl import *
from arcadegame.particle import *
from arcadegame.tank import *
from arcadegame.gghs import *
import os
import random
import timeclass GameView(arcade.View):def __init__(self):super().__init__()self.scene = Noneself.wanjia = Nonefile_path = os.path.dirname(os.path.abspath(__file__))os.chdir(file_path)arcade.set_background_color(arcade.csscolor.BLACK)self.physics_engine = Noneself.camera = None  # 摄象机self.gui_camera = None  # 第二摄象机self.score = 0# 加载声音self.init_sound()# 设置地图self.tile_map = None# 是否重新设置分数self.reset_score = True# 地图的最右边self.end_of_map = 0self.top_of_map = 0# 关卡级别self.level = 1self.tankdl = 0.1  # 坦克前进动力self.words = '请打击敌人--'self.key = ''  # 答案# self.init_rect()self.frame_count = 0self.stopnum = 0self.word_dict = {}self.word_keys = []# 敌人及子弹重置self.enemy_reset = Falseself.danyuan= 3self.year = '三年级上册'self.years =['三年级上册','三年级下册', '四年级上册','四年级下册']self.gk={'三年级上册':[1,2,3,4,5,6],'三年级下册':[1,2,3,4,5]}self.update_stop = False# 特效self.tx_pic_list = []def init_sound(self):# 加载声音self.collect_coin_sound = arcade.load_sound("sounds/coin2.wav")self.game_over = arcade.load_sound(":resources:sounds/gameover1.wav")self.shoot_sound = arcade.load_sound(":resources:sounds/hurt5.wav")self.hit_sound = arcade.load_sound(":resources:sounds/hit5.wav")self.hit_sound1 = arcade.load_sound(":resources:sounds/explosion1.wav")self.hit_sound2 = arcade.load_sound(":resources:sounds/explosion2.wav")self.hit_sound3 = arcade.load_sound(":resources:sounds/hit1.wav")self.hit_sound4 = arcade.load_sound(":resources:sounds/hit2.wav")def setup_enemy(self):# passself.scene.add_sprite_list_after(LAYER_tanks, 'wj')if len(self.word_keys) == 0:if self.danyuan==len(self.gk[self.year]):self.level += 1self.year =self.years[self.level]else:self.danyuan += 1self.setup_word(self.danyuan, self.year)if len(self.word_keys) > 0:self.key = self.word_dict[self.word_keys[0]]  # 朋友# print('key',self.key)xsword = {}xsword[self.word_keys[0]] = self.word_dict[self.word_keys[0]]# 随机取3sankey = random.sample(self.word_dict.keys(), 3)if self.word_keys[0] in sankey:sankey.remove(self.word_keys[0])# 增加两个敌人xsword[sankey[0]] = self.word_dict[sankey[0]]xsword[sankey[1]] = self.word_dict[sankey[1]]# 增加随机坦克posx=[]random_x= random.random()*SCREEN_width/3for jj in range(3):tempx=random_x+400*jjif tempx>self.end_of_map:tempx=random.random()*SCREEN_width/2posx.append(tempx)random_y = random.random() * self.top_of_map / 3random.shuffle(posx)  # 打乱顺序# print(posx)j=0for x in xsword:tank = Enemy_tank("images/坦克2.png", 0.5, posx[j], random_y)tank.word = xtank.hz = xsword[x]self.scene.add_sprite(LAYER_tanks, tank)j +=1# 去掉已显示单词self.word_keys.remove(self.word_keys[0])# 增加子弹层self.scene.add_sprite_list_after(LAYER_bullet, 'wj')# 增加爆炸粒子列表self.scene.add_sprite_list_after(LAYER_explosions, 'wj')def setup_player(self):# 添加角色.self.wanjia = Tank("images/坦克.png", 0.5, self.end_of_map, self.top_of_map)self.wanjia.center_x = PLAYER_start_xself.wanjia.center_y = PLAYER_start_yself.scene.add_sprite("wj", self.wanjia)self.scene.add_sprite_list_after("wj", LAYER_platforms)  # 添加精灵列表,把玩家放在哪一层,前后层在此关健self.scene.add_sprite("wj", self.wanjia)self.physics_engine = arcade.PhysicsEngineSimple(self.wanjia,walls=self.scene['建筑物'])# 增加角色子弹层self.scene.add_sprite_list_after(LAYER_bullet_player, 'wj')def setup_map(self):# 初始化场景map_name = f"地图\佛相广场3.json"  # jia{self.level}.json"# 层属性layer_options = {LAYER_platforms: {"use_spatial_hash": True,},LAYER_tree: {"use_spatial_hash": False,},'建筑物': {"use_spatial_hash": True,},}# 读地图文件self.tile_map = arcade.load_tilemap(map_name, TILE_Scaling, layer_options)# 使用我们的TileMap初始化场景,这将自动添加所有层,以正确的顺序在场景中显示为SpriteList。self.scene = arcade.Scene.from_tilemap(self.tile_map)# print(self.tile_map.width,self.tile_map.height)self.end_of_map = self.tile_map.width * self.tile_map.tile_height * TILE_Scalingself.top_of_map = self.tile_map.height * self.tile_map.tile_width * TILE_Scalingdef setup_word(self, dy=1, year='三年级上册'):self.word_dict = getwordzw(u'english.xls', sheet_index=3, danyuan=dy, nianji=year)self.word_keys = list(self.word_dict.keys())print(self.word_dict)print(self.word_keys)def get_remintext(self,textstr):return arcade.Text(f"提醒: {textstr}",start_x=(SCREEN_width - len(textstr) * 18) / 2,start_y=SCREEN_height - 30,color=arcade.csscolor.WHITE_SMOKE,font_size=18,)def setup_rect(self):self.shapes = arcade.ShapeElementList()color1 = (128, 138, 135)# 参数:距形中心位置,宽,高,颜色,线宽rect = arcade.create_rectangle(SCREEN_width / 2, SCREEN_height - 60 / 2, SCREEN_width, 60, color1)self.shapes.append(rect)self.text_remind = self.get_remintext(self.words + self.key)def setup_explosion_piclist(self):columns = 16count = 60sprite_width = 256sprite_height = 256file_name = "images/爆炸动画图.png"# 从精灵表加载爆炸self.explosion_texture_list = []self.explosion_texture_list = arcade.load_spritesheet(file_name, sprite_width, sprite_height, columns, count)def setup(self):# 摄象机self.camera = arcade.Camera(SCREEN_width, SCREEN_height)self.gui_camera = arcade.Camera(SCREEN_width, SCREEN_height)self.setup_map()if self.reset_score:self.score = 0self.reset_score = True# 加载单词self.setup_word(self.danyuan,self.year)# 爆炸self.setup_explosion_piclist()self.explosions_list = arcade.SpriteList()# 添加角色.self.setup_player()self.setup_enemy()self.setup_rect()for i in range(1, 10):self.tx_pic_list.append(arcade.load_texture('images/升级特效/2/图像' + str(i) + '.png'))def on_show_view(self):self.setup()def on_key_press(self, key: int, modifiers: int):if not self.wanjia.respawning and key == arcade.key.SPACE and self.wanjia.bullets > 0:bullet_sprite = BulletSprite(":resources:images/space_shooter/""laserBlue01.png",1.8)self.wanjia.bullets -= 1bullet_sprite.guid = "子弹"bullet_speed = 13bullet_sprite.change_y = \math.cos(math.radians(self.wanjia.angle)) * bullet_speedbullet_sprite.change_x = \-math.sin(math.radians(self.wanjia.angle)) \* bullet_speedbullet_sprite.center_y = self.wanjia.center_ybullet_sprite.center_x = self.wanjia.center_xself.scene[LAYER_bullet_player].append(bullet_sprite)arcade.play_sound(self.shoot_sound, speed=random.random() * 3 + 0.5)if key == arcade.key.LEFT:self.wanjia.change_angle = 1elif key == arcade.key.RIGHT:self.wanjia.change_angle = -1elif key == arcade.key.UP:self.wanjia.thrust = self.tankdlelif key == arcade.key.DOWN:self.wanjia.thrust = -self.tankdldef on_key_release(self, key: int, modifiers: int):if key == arcade.key.LEFT:self.wanjia.change_angle = 0elif key == arcade.key.RIGHT:self.wanjia.change_angle = 0elif key == arcade.key.UP:self.wanjia.thrust = 0elif key == arcade.key.DOWN:self.wanjia.thrust = 0def on_draw(self):self.clear()self.camera.use()  # 摄象机self.scene.draw()  # 摄相机与scence的顺序不能放错,否则不会移动for aa in self.scene[LAYER_tanks]:aa.draw_word(aa.left, aa.top + 20)self.explosions_list.draw()self.gui_camera.use()self.shapes.draw()self.text_remind.draw()# 在屏幕上绘制分数,用屏幕滚动score_text = f"得分: {self.score}"arcade.draw_text(score_text, SCREEN_width-200, SCREEN_height-40, arcade.csscolor.RED, 18, )score_text = f"子弹: {self.wanjia.bullets},生命:{self.wanjia.life},gk:{self.level},等级:{self.danyuan}"arcade.draw_text(score_text, 10, SCREEN_height-40, arcade.csscolor.RED, 18, )# 摄相机随角色移动def center_camera_to_player(self):"""摄相机随角色移动"""screen_center_x = self.wanjia.center_x - (self.camera.viewport_width / 2)screen_center_y = self.wanjia.center_y - (self.camera.viewport_height / 2)# 防止相机出界if screen_center_x < 0:screen_center_x = 0if screen_center_y < 0:screen_center_y = 0player_centered = screen_center_x, screen_center_yself.camera.move_to(player_centered)# 敌机子弹碰撞检测def collision_bullet_enemy(self):self.scene[LAYER_explosions].update()# 子弹的碰撞检测for bullet in self.scene[LAYER_bullet]:# hit_list = arcade.check_for_collision_with_list(bullet,  self.scene['建筑物'])hit_list = arcade.check_for_collision_with_lists(bullet,[self.scene['wj'],# self.scene[LAYER_tree],self.scene['建筑物'],],)if hit_list:bullet.remove_from_sprite_lists()for cc in hit_list:if (self.scene['wj'] in cc.sprite_lists):# print(cc)# 磁撞的是敌人 根据子弹伤害及敌人生命值确定争分数及消失self.wanjia.life -= 1if self.wanjia.life <= 0:game_over = GameOverView()self.window.show_view(game_over)return# print(cc)if (self.scene['建筑物'] in cc.sprite_lists):# 磁撞的是建筑物,  制造爆炸for i in range(20):particle = Particle(self.scene[LAYER_explosions])particle.position = cc.position  # 粒子位置,也即敌人位置self.scene[LAYER_explosions].append(particle)smoke = Smoke(30)smoke.position = cc.position  # 烟雾位置self.scene[LAYER_explosions].append(smoke)cc.remove_from_sprite_lists()# 爆炸声音arcade.sound.play_sound(self.hit_sound)return# 如过子弹超过地图则删掉.if (bullet.right < 0) or (bullet.bottom > self.top_of_map) or (bullet.left > self.end_of_map):bullet.remove_from_sprite_lists()def collision_player_enemy(self):# 碰撞检测player_collision_list = arcade.check_for_collision_with_lists(self.wanjia,[self.scene[LAYER_tanks],],)# 检测磁到的是硬币还是敌人for collision in player_collision_list:if self.scene[LAYER_tanks] in collision.sprite_lists:collision.remove_from_sprite_lists()arcade.play_sound(self.hit_sound3)if collision.hz == self.key:self.score += 50self.wanjia.bullets += 3self.enemy_reset = Truereturnelse: # 撞错了减两命self.wanjia.life -= 2if self.wanjia.life <= 0:arcade.play_sound(self.game_over)game_over = GameOverView()self.window.show_view(game_over)returnelse:# 算出这枚硬币值多少分if "Points" not in collision.properties:print("警告,收集的硬币没有点数属性.")else:points = int(collision.properties["Points"])self.score += points# Remove the coincollision.remove_from_sprite_lists()arcade.play_sound(self.collect_coin_sound)# 爆炸(动画效果)def baozha(self, hit_list):# 制造爆炸explosion = Explosion(self.explosion_texture_list)# 位置explosion.center_x = hit_list[0].center_xexplosion.center_y = hit_list[0].center_y# 更新爆炸explosion.update()# 添加列表self.explosions_list.append(explosion)# 角色子弹碰撞检测def collision_bullet_player(self):# 调用更新self.explosions_list.update()# 子弹的碰撞检测for bullet in self.scene[LAYER_bullet_player]:hit_list = arcade.check_for_collision_with_lists(bullet,[self.scene[LAYER_tanks],# self.scene[LAYER_tree],self.scene['建筑物'],],)if hit_list:bullet.remove_from_sprite_lists()for cc in hit_list:# 敌坦克与子弹碰撞if (self.scene[LAYER_tanks] in cc.sprite_lists):# 磁撞的是敌人 根据子弹伤害及敌人生命值确定争分数及消失cc.remove_from_sprite_lists()# 声音arcade.play_sound(self.hit_sound1)# 爆炸效果self.baozha(hit_list)if cc.hz == self.key:self.score += 100self.wanjia.bullets += 5self.enemy_reset = Truereturnelse:self.wanjia.life -= 2# print('打错了')if (self.scene['建筑物'] in cc.sprite_lists):# 磁撞的是建筑物,  制造爆炸for i in range(20):particle = Particle(self.scene[LAYER_explosions])particle.position = cc.position  # 粒子位置,也即敌人位置self.scene[LAYER_explosions].append(particle)smoke = Smoke(30)smoke.position = cc.position  # 烟雾位置self.scene[LAYER_explosions].append(smoke)cc.remove_from_sprite_lists()# 爆炸声音arcade.sound.play_sound(self.hit_sound2)return# 如过子弹超过地图则删掉.if (bullet.right < 0) or (bullet.bottom > self.top_of_map) or (bullet.left > self.end_of_map):bullet.remove_from_sprite_lists()def setup_texiao(self):# tx_list = arcade.load_textures(,文件名及rect列表tx = Explosion(self.tx_pic_list)tx.center_x = self.wanjia.center_x+random.randint(50,100)tx.center_y = self.wanjia.center_y+random.randint(80,160)tx.update()self.explosions_list.append(tx)  #  暂时借用爆炸列表# 碰撞检测def collision_all(self):self.collision_bullet_enemy()self.collision_bullet_player()self.collision_player_enemy()if self.enemy_reset:# 重置坦克及子弹self.scene.remove_sprite_list_by_name(LAYER_bullet)self.scene.remove_sprite_list_by_name(LAYER_tanks)self.scene.add_sprite_list_after(LAYER_bullet, 'wj')self.scene.add_sprite_list_after(LAYER_tanks, 'wj')if len(self.word_keys)==0:print('升级成功')self.update_stop = True# self.setup_texiao()return# arcade.draw_text('升级成功', self.wanjia.center_x, self.wanjia.center_y + 40, arcade.csscolor.RED, 18, )# time.sleep(10)self.setup_enemy()self.enemy_reset = False# 敌人更新def update_ememy_tank(self):colors_bullet_list = [arcade.color.RED_ORANGE, arcade.color.BLUE_GRAY, arcade.color.GREEN,arcade.color.YELLOW_GREEN]self.frame_count += 1for enemy in self.scene[LAYER_tanks]:enemy.update()# 首先,计算与角色的角度。我们可以这样做只有当子弹发射时,但在这种情况下,我们会轮换# 敌人每一帧都要面对玩家,所以我们会这样做# 起始位置start_x = enemy.center_xstart_y = enemy.center_y# 目标位置dest_x = self.wanjia.center_xdest_y = self.wanjia.center_y# 计算子弹行进的角度。x_diff = dest_x - start_xy_diff = dest_y - start_yangle = math.atan2(y_diff, x_diff)# 设置敌人面向角色enemy.angle = math.degrees(angle) - 90# 每60帧发射一次# to_player_leng=if (self.frame_count % 220 == 0):# 利用粒子制子弹bullet = arcade.SpriteCircle(8, colors_bullet_list[random.randrange(4)])bullet.center_x = start_xbullet.center_y = start_y# 设置子弹角度朝向角色bullet.angle = math.degrees(angle)# 根据角度,计算子弹的变化change_x和change_y。速度是子弹行进的速度。bullet.change_x = math.cos(angle) * 5bullet.change_y = math.sin(angle) * 5self.scene.add_sprite(LAYER_bullet, bullet)# self.bullet_list.append(bullet)self.scene[LAYER_tanks].update()def on_update(self, delta_time: float):self.physics_engine.update()  # 运用引擎移动角色# self.scene[LAYER_bullet_player].update()# 单个更新合为所有层的合并self.scene.update(['wj',LAYER_bullet_player, LAYER_bullet,LAYER_explosions])if self.update_stop:self.stopnum += 1# print(self.stopnum)if self.stopnum < 280:if self.stopnum % 30 ==0:self.setup_texiao()# self.explosions_list.update()returnself.text_remind = self.get_remintext('正在升级!')self.explosions_list.update()else:self.stopnum = 0self.text_remind = self.get_remintext('升级完成!')self.update_stop = Falseself.danyuan += 1if self.score>300: #分数换命self.wanjia.life += self.score // 300self.score = self.score % 300self.wanjia.life += 5 # 升级成功+5条命self.setup_word(self.danyuan,self.year)else:self.text_remind = self.get_remintext(self.words + self.key)self.collision_all()# 更新动画self.update_ememy_tank()# # 掉下或level达到最后一关时,游戏结束,或重新开始# if self.wanjia.center_y < -100 or self.level == 3:#     self.wanjia.center_x = PLAYER_start_x#     self.wanjia.center_y = PLAYER_start_y#     arcade.play_sound(self.game_over)self.center_camera_to_player()  # 摄象机class MainMenu(arcade.View):"""Class that manages the 'menu' view."""def on_show_view(self):"""设置背景"""arcade.set_background_color(arcade.color.WHITE)self.g = GuiGL()# 初始化场景self.background = arcade.Sprite("images/战场1.png", 1.3)self.background.center_x = SCREEN_width / 2self.background.center_y = SCREEN_height / 2# 设置背景色arcade.set_background_color(arcade.color.DARK_BLUE_GRAY)#  事件方法2,自定义方法函数self.g.start_button.on_click = self.on_click_startdef on_draw(self):self.clear()self.background.draw()self.g.manager.draw()score_text = f"坦克大战"arcade.draw_text(score_text,SCREEN_width / 2 - 80,SCREEN_height / 2 + 220,arcade.csscolor.GOLD,30,)def on_click_start(self, event):print("自定义方法调用--开始:", event)game_view = GameView()self.window.show_view(game_view)class GameOverView(arcade.View):"""结整界面"""def on_show_view(self):"""设置背景"""arcade.set_background_color(arcade.color.BLACK)def on_draw(self):"""Draw the game overview"""self.clear()arcade.draw_text("游戏结束,点击重新开始",SCREEN_width / 2,SCREEN_height / 2,arcade.color.WHITE,30,anchor_x="center",)def on_mouse_press(self, _x, _y, _button, _modifiers):"""Use a mouse press to advance to the 'game' view."""game_view = GameView()self.window.show_view(game_view)def main():"""主函数"""window = arcade.Window(SCREEN_width, SCREEN_height, SCREEN_title)# menu_view = MainMenu()menu_view = GameView()window.show_view(menu_view)arcade.run()if __name__ == "__main__":main()

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 32/50次。
可以关注我,点赞我、评论我、收藏我啦。

小学生python游戏编程arcade----坦克大战4相关推荐

  1. 小学生python游戏编程arcade----坦克大战2

    小学生python游戏编程arcade----坦克大战2 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.提示框制作 1.1养眼绿色 1.2 画距形提示框 1.3 效果图 1.4 ...

  2. 小学生python游戏编程2----飞机大战1

    小学生python游戏编程2----飞机大战1 前言 主要设计 1.界面设计 2.动态背景 3.记分的实现 4.射击游戏功能的实现 5.声音的实现 应用知识点 1.python知识点 1.1 角色创建 ...

  3. 小学生python游戏编程arcade----可旋转的坦克的发射子弹

    小学生python游戏编程arcade----可旋转的坦克的发射子弹 前言 小学生python游戏编程arcade----可旋转坦克的发射子弹 1.可旋转坦克的发射子弹 1.1 子弹的类 1.2 发射 ...

  4. 小学生python游戏编程arcade----可旋转的坦克

    小学生python游戏编程arcade----可旋转的坦克 前言 小学生python游戏编程arcade----可旋转的坦克 1.可旋转的坦克 1.1 炮台朝向问题,坦克图片的加载,注意事项 1.2坦 ...

  5. 小学生python游戏编程arcade----单词对错检测及记录写入excel中

    小学生python游戏编程arcade----单词对错检测及记录写入excel中 前言 单词对错检测及记录写入excel中 1.excel读取修改 1.1 excel读取 1.2 修改用到的库 1.3 ...

  6. 小学生python游戏编程arcade----动画图片实现爆炸效果

    小学生python游戏编程arcade----动画图片实现爆炸效果 前言 动画图片实现爆炸效果 1.爆炸类的的实现 1.1爆炸图片 1.2 类的定义 1.3 爆炸类的引用 1.4 爆炸类的更新 1.5 ...

  7. 小学生python游戏编程arcade----excel调用

    小学生python游戏编程arcade----excel调用 前言 小学生python游戏编程arcade----excel调用 1.excel文件 1.1 excel表头 1.2 excel文件 1 ...

  8. 小学生python游戏编程arcade----爆炸粒子类

    小学生python游戏编程arcade----爆炸粒子类 前言 1.1 参数设置 粒子加速下降的速度.如果不需要,则为0 粒子退出的速度 粒子移动的速度.范围为2.5<-->5,设置为2. ...

  9. 小学生python游戏编程arcade----基本知识1

    小学生python游戏编程arcade----基本知识 前言 基本知识 1.简单窗体 2.试着添加角色及背景 3.场景 4.角色控制及物理引擎 总结 源码获取 前言 前面章节分享试用了pyzero,p ...

最新文章

  1. 自动输入runas密码的方法
  2. mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'
  3. Docker 的 Web 管理工具 DockerFly
  4. 实用的4W、5V直流开关稳压电源电路图及解析
  5. 关于伺服驱动控制的课本_西门子伺服电机驱动系列汇总,说明书参数及使用方法。...
  6. 显示lib包_【手把手教你】股市技术分析利器之TA-Lib(一)
  7. php安装solr扩展,PHP扩展模块 solr 安装
  8. Android之获取手机上的图片和视频缩略图thumbnails
  9. php mysql 备份还原_PHP执行Mysql数据库的备份和还原
  10. FileFilter接口 java
  11. 小米宣布新一轮组织架构调整,崔宝秋挂帅技术委员会
  12. RHEL5.9下cacti监控的部署详解
  13. 如何确定恶意软件是否在自己的电脑中执行过?
  14. vue工程化与路由router
  15. 巧用编辑器正则表达式,批量修改删除超链接
  16. 如何在delphi里面控制Edit只能输入数字
  17. 怎样从altera下载软件与器件库
  18. 浏览器扩展应用安装AXURE插件
  19. 扫码枪扫码直接提交ajax,js监听页面扫码枪
  20. 服务器系统补丁失败,Windows Server 2016安装累积更新补丁失败

热门文章

  1. Echarts地图实现散点配置
  2. 最新浙江安全员B考试单选练习题库
  3. 缓存方案及分布式常见问题解决方案
  4. 分布式架构-流量治理-流量控制
  5. 通过交换相邻数来完成排序所需要的最少交换次数
  6. 一分钟了解:“文献:基于Sigma点卡尔曼滤波的天基红外低轨卫星目标跟踪”
  7. 走投无路的算法学习笔记|Day001
  8. 洛谷P3205 [HNOI2010]合唱队
  9. 微信v3支付签名 java main方法测试成功
  10. KMP字符串模式匹配详解(zz)