一. *Shoot游戏是一款十分有趣的射击类小游戏,流畅的画面,高难度的挑战。
1 游戏中,玩家驾驶英雄机,在空中进行战斗。点击并移动自己的英雄机,发射炮弹,打掉敌飞机以及蜜蜂,来获得分数和奖励,打掉一架敌飞机赢得5分,打掉一只蜜蜂赢得1条命或是获得20次双倍火力,如果撞上敌飞机或小蜜蜂,将减少命、双倍火力清零。每撞到一次蜜蜂或是敌飞机命减1,当命数为0时,则游戏结束。
项目需求分析以及软件概要设计:
2.业务需求分析:找对象以及对象之间的关系。
本项目中的对象如下:
ShootGame
|-- 英雄机 Hero
|-- 敌飞机 Airplane
|-- 蜜蜂 Bee
|-- 子弹 Bullet
3 游戏界面显示
首先,新建名为shoot的Java工程;然后,在工程下的src目录下新建包com.cetc.shoot ;最后,将该工程所需的图片拷贝到该包下,工程结构如图所示
图片链接:https://pan.baidu.com/s/1S5sgZObtRAQClg79_1U1kw
提取码:nssb
完整代码如下:
Airplane类的完整代码如下所示:

package com.cetc.shoot;/** 敌机: 是飞行物,也是敌人 */
public class Airplane extends FlyingObject implements Enemy {private int speed = 2; //走步的步数/** 构造方法 */public Airplane(){image = ShootGame.airplane; //图片width = image.getWidth();   //宽height = image.getHeight(); //高x = (int) (Math.random()*(ShootGame.WIDTH-this.width));
//      x=100;
//      y=100;}/** 重写getScore() */public int getScore(){return 5;}/** 重写step() */public void step(){y+=speed; //y加(向下)}/** 重写outOfBounds() */public boolean outOfBounds(){return this.y>=ShootGame.HEIGHT; //敌机的y>=屏幕的高,即为越界}
}

Award类的完整代码如下所示:

package com.cetc.shoot;public interface Award {public int DOUBLE_FIRE = 0; //火力public int LIFE = 1; //命/** 获取奖励类型 0为火力 1为命 */public int getType();
}

Bee类的完整代码如下所示:

package com.cetc.shoot;import java.util.Random;/** 小蜜蜂: 是飞行物,也是奖励 */
public class Bee extends FlyingObject implements Award {private int xSpeed = 1; //x坐标走步步数private int ySpeed = 2; //y坐标走步步数private int awardType; //奖励类型/** 构造方法 */public Bee(){image = ShootGame.bee; //图片width = image.getWidth();   //宽height = image.getHeight(); //高y = -height; //y:负的蜜蜂的高Random rand = new Random(); //创建随机数对象x = rand.nextInt(ShootGame.WIDTH-this.width); //x:0到(屏幕宽-蜜蜂宽)之内的随机数awardType = rand.nextInt(2); //奖励类型为0到1之间的随机数
//      x=100;
//      y=200;}/** 重写getType() */public int getType(){return awardType; }/** 重写step() */public void step(){x+=xSpeed; //x加(向左或向右)y+=ySpeed; //y加(向下)if(x>=ShootGame.WIDTH-this.width){ //x>=(屏幕宽-蜜蜂宽)时,x减(向左)xSpeed = -1;}if(x<=0){ //x<=0时,x加(向右)xSpeed = 1;}}/** 重写outOfBounds() */public boolean outOfBounds(){return this.y>=ShootGame.HEIGHT; //蜜蜂的y>=屏幕的高,即为越界}
}

Bullet类的完整代码如下所示:

package com.cetc.shoot;/** 子弹: 是飞行物 */
public class Bullet extends FlyingObject {private int speed = 3; //走步步数/** 构造方法   x:子弹的x坐标   y:子弹的y坐标*/public Bullet(int x,int y){image = ShootGame.bullet; //图片this.x = x; //x坐标:与英雄机有关this.y = y; //y坐标:与英雄机有关}/** 重写step() */public void step(){y-=speed; //y减(向上)}/** 重写outOfBounds() */public boolean outOfBounds(){return this.y<=-this.height; //子弹的y<=负的子弹的高,即为越界}
}

Enemy类的完整代码如下所示:

package com.cetc.shoot;
/***    敌人 ,可以有分数**/
public interface Enemy {/*** 敌人的分数*/public int getScore();
}
FlyingObject类的完整代码如下所示:
package com.cetc.shoot;import java.awt.image.BufferedImage;public abstract class FlyingObject {protected int x; //x坐标protected int y; //y坐标protected int width; //宽protected int height; //高protected BufferedImage image; //图片public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public int getWidth() {return width;}public void setWidth(int width) {this.width = width;}public int getHeight() {return height;}public void setHeight(int height) {this.height = height;}public BufferedImage getImage() {return image;}public void setImage(BufferedImage image) {this.image = image;}/** 飞行物走一步 */public abstract void step();/***    检查当前飞行物体是否被子弹(x,y)击(shoot)中,* @param bullet 子弹对象* @return true表示击中*/public boolean shootBy(Bullet bullet) {int x = bullet.x;int y = bullet.y;return this.x<x && x<this.x+width && this.y<y && y<this.y+height;}/** 检查飞行物是否出界 */public abstract boolean outOfBounds();
}

Hero类的完整代码如下所示:


```csharp
package com.cetc.shoot;import java.awt.image.BufferedImage;
/** 英雄机: 是飞行物 */
public class Hero extends FlyingObject {private int life; //命private int doubleFire; //火力值private BufferedImage[] images = {}; //图片切换数组private int index = 0; //协助图片切换/** 构造方法 */public Hero(){image = ShootGame.hero0; //图片width = image.getWidth();   //宽height = image.getHeight(); //高x = 150; //x坐标:固定的值y = 400; //y坐标:固定的值life = 3; //命数为3doubleFire = 0; //火力值为0(单倍火力)images = new BufferedImage[]{ShootGame.hero0,ShootGame.hero1}; //两张图片切换}/** 重写step() */public void step() {if(images.length>0) {image = images[index++/10%images.length];}}/** 英雄机发射子弹 */public Bullet[] shoot(){int xStep = this.width/4; //1/4英雄机的宽int yStep = 20; //固定的值if(doubleFire>0){ //双倍Bullet[] bs = new Bullet[2]; //两发子弹bs[0] = new Bullet(this.x+1*xStep,this.y-yStep); //x:英雄机的x+1/4英雄机的宽 y:英雄机的y-20bs[1] = new Bullet(this.x+3*xStep,this.y-yStep); //x:英雄机的x+3/4英雄机的宽 y:英雄机的y-20doubleFire-=2; //发射一次双倍火力时,火力值减2return bs;}else{ //单倍Bullet[] bs = new Bullet[1]; //一发子弹bs[0] = new Bullet(this.x+2*xStep,this.y-yStep); //x:英雄机的x+2/4英雄机的宽 y:英雄机的y-20return bs;}}/** 英雄机随着鼠标移动  x:鼠标的x坐标  y:鼠标的y坐标*/public void moveTo(int x,int y){this.x = x - this.width/2;  //英雄机的x:鼠标的x-1/2英雄机的宽this.y = y - this.height/2; //英雄机的y:鼠标的y-1/2英雄机的高}/** 英雄机增火力 */public void addDoubleFire(){doubleFire+=40; //火力值增40}/** 增命 */public void addLife(){life++; //命数增1}/** 获取命 */public int getLife(){return life; //返回命数}/** 减命 */public void subtractLife(){life--;}public void setDoubleFire(int doubleFire) {this.doubleFire = doubleFire;}/** 重写outOfBounds() */public boolean outOfBounds(){return false; //永不越界}/** 检测英雄机与敌人的碰撞 this:英雄机 other:敌人 */public boolean hit(FlyingObject other){int x1 = other.x-this.width/2; //x1:敌人的x-1/2英雄机的宽int x2 = other.x+other.width+this.width/2; //x2:敌人的x+敌人的宽+1/2英雄机的宽int y1 = other.y-this.height/2; //y1:敌人的y-1/2英雄机的高int y2 = other.y+other.height+this.height/2; //y2:敌人的y+敌人的高+1/2英雄机的高int x = this.x+this.width/2;  //x:英雄机的x+1/2英雄机的宽int y = this.y+this.height/2; //y:英雄机的y+1/2英雄机的高return x>x1 && x<x2&&y>y1 && y<y2; //x在x1和x2之间,并且,y在y1和y2之间,即为撞上了}
}

ShootGame类的完整代码如下所示:

package com.cetc.shoot;import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.image.BufferedImage;
import java.util.Arrays;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;//主程序类
public class ShootGame extends JPanel{public static final int WIDTH = 400;  //窗口宽public static final int HEIGHT = 654; //窗口高public static BufferedImage background; //背景图public static BufferedImage start;      //启动图public static BufferedImage pause;      //暂停图public static BufferedImage gameover;   //游戏结束图public static BufferedImage airplane;   //敌机public static BufferedImage bee;        //小蜜蜂public static BufferedImage bullet;     //子弹public static BufferedImage hero0;      //英雄机0public static BufferedImage hero1;      //英雄机1private Hero hero = new Hero(); //英雄机对象private FlyingObject[] flyings = {}; //敌人(敌机+小蜜蜂)数组private Bullet[] bullets = {}; //子弹数组private Timer timer;    //定时器private int intervel = 1000/100;  //时间间隔(毫秒)private int score = 0; //玩家的得分private int state;public static final int START = 0;     //启动状态public static final int RUNNING = 1;   //运行状态public static final int PAUSE = 2;     //暂停状态public static final int GAME_OVER = 3; //游戏结束状态public ShootGame(){//      flyings = new FlyingObject[2];
//      flyings[0] = new Airplane();
//      flyings[1] = new Bee();
//      bullets = new Bullet[1];
//      bullets[0] = new Bullet(150,180);}static{ //加载图片try{background = ImageIO.read(ShootGame.class.getResource("background.png"));start = ImageIO.read(ShootGame.class.getResource("start.png"));pause = ImageIO.read(ShootGame.class.getResource("pause.png"));gameover = ImageIO.read(ShootGame.class.getResource("gameover.png"));airplane = ImageIO.read(ShootGame.class.getResource("airplane.png"));bee = ImageIO.read(ShootGame.class.getResource("bee.png"));bullet = ImageIO.read(ShootGame.class.getResource("bullet.png"));hero0 = ImageIO.read(ShootGame.class.getResource("hero0.png"));hero1 = ImageIO.read(ShootGame.class.getResource("hero1.png"));}catch(Exception e){e.printStackTrace();}}/** 重写paint() g:画笔*/public void paint(Graphics g){g.drawImage(background,0,0,null); //画背景图paintHero(g); //画英雄机paintFlyingObjects(g); //画敌人(敌机+小蜜蜂)paintBullets(g); //画子弹paintScore(g); //画分数paintState(g); //画状态}/** 画英雄机对象 */public void paintHero(Graphics g){g.drawImage(hero.image,hero.x,hero.y,null); //画对象}/** 画敌人(敌机+小蜜蜂)对象 */public void paintFlyingObjects(Graphics g){for(int i=0;i<flyings.length;i++){ //遍历敌人(敌机+小蜜蜂)数组FlyingObject f = flyings[i]; //获取每一个敌人g.drawImage(f.image,f.x,f.y,null); //画敌人对象}}/** 画子弹对象 */public void paintBullets(Graphics g){for(int i=0;i<bullets.length;i++){ //遍历子弹数组Bullet b = bullets[i]; //获取每一个子弹g.drawImage(b.image,b.x,b.y,null); //画子弹对象}}public static void main(String[] args) {JFrame frame = new JFrame("Fly"); //创建一个Jframe对象ShootGame game = new ShootGame(); //创建一个JPanel对象frame.add(game); //将面板添加到框架中frame.setSize(WIDTH, HEIGHT); //设置窗口大小frame.setAlwaysOnTop(true); //设置总是在最上面frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置默认关闭操作(窗口关闭时退出程序)frame.setLocationRelativeTo(null); //设置居中显示frame.setVisible(true); //1.设置窗口可见  2.尽快调用paint()game.action();   //启动执行}/** 随机生成飞行物 */public FlyingObject nextOne(){Random rand = new Random(); //创建随机数对象int type = rand.nextInt(20); //生成0到19之间的随机数if(type==0){ //为0时返回蜜蜂对象return new Bee();}else{ //为1到19时返回敌机对象return new Airplane();}}int flyEnteredIndex = 0; //敌人入场计数/** 敌人(敌机+小蜜蜂)入场 */public void enterAction(){ //10毫秒走一次flyEnteredIndex++; //每10毫秒增1if(flyEnteredIndex%40==0){ //400(10*40)毫秒走一次FlyingObject obj = nextOne(); //获取敌人(敌机+小蜜蜂)对象flyings = Arrays.copyOf(flyings,flyings.length+1); //扩容(扩大一个容量)flyings[flyings.length-1] = obj; //将敌人对象赋值给数组的最后一个元素}}/** 飞行物走一步 */public void stepAction(){ //10毫秒走一次hero.step(); //英雄机走一步for(int i=0;i<flyings.length;i++){ //遍历所有敌人flyings[i].step(); //每个敌人走一步}for(int i=0;i<bullets.length;i++){ //遍历所有子弹bullets[i].step(); //每个子弹走一步}}/** 启动程序的执行 */public void action(){MouseAdapter l = new MouseAdapter(){ //创建侦听器对象/** 鼠标移动事件 */public void mouseMoved(MouseEvent e){if(state==RUNNING){ //运行状态时执行int x = e.getX();  //获取鼠标的x坐标int y = e.getY();  //获取鼠标的y坐标hero.moveTo(x, y); //英雄机随着鼠标动}}/** 鼠标点击事件 */public void mouseClicked(MouseEvent e){switch(state){ //不同状态时点击后有不同的反应case START: //启动状态时state = RUNNING; //当前状态变为运行状态break;case GAME_OVER: //游戏结束状态时score = 0; //清理现场hero = new Hero();flyings = new FlyingObject[0];bullets = new Bullet[0];state = START; //当前状态变为启动状态break;}}/** 鼠标移出事件 */public void mouseExited(MouseEvent e){if(state==RUNNING){ //运行状态时state=PAUSE; //当前状态改为暂停状态}}/** 鼠标移入事件 */public void mouseEntered(MouseEvent e){if(state==PAUSE){ //暂停状态时state=RUNNING; //当前状态改为运行状态}}};this.addMouseListener(l); //处理鼠标操作事件this.addMouseMotionListener(l); //处理鼠标滑动操作timer = new Timer(); //创建定时器对象timer.schedule(new TimerTask(){public void run(){ //10毫秒走一次--定时干的那个事if(state==RUNNING){ //运行状态时执行enterAction(); //敌人(敌机+小蜜蜂)入场stepAction();  //飞行物走一步shootAction(); //英雄机发射子弹--子弹入场bangAction();  //子弹与敌人的碰撞outOfBoundsAction(); //删除越界的飞行物checkGameOverAction(); //检测游戏是否结束}repaint();     //重画,调用paint()}},intervel,intervel);}int shootIndex = 0; //射击计数/** 英雄机发射子弹(子弹入场) */public void shootAction(){ //10毫秒走一次shootIndex++; //每10毫秒增1if(shootIndex%30==0){ //每300(10*30)毫秒走一次Bullet[] bs = hero.shoot(); //获取英雄机发射出来的子弹bullets = Arrays.copyOf(bullets, bullets.length+bs.length); //扩容(bs有几个元素就扩大几个容量)System.arraycopy(bs,0,bullets,bullets.length-bs.length,bs.length); //数组的追加(将bs追加到bullets数组中)}}/** 所有子弹与所有敌人撞 */public void bangAction(){ //10毫秒走一次for(int i=0;i<bullets.length;i++){ //遍历所有子弹Bullet b = bullets[i]; //获取每一个子弹bang(b); //一个子弹与所有敌人撞}}/** 一个子弹与所有敌人撞 */public void bang(Bullet b){int index = -1; //被撞敌人的下标for(int i=0;i<flyings.length;i++){ //遍历所有敌人FlyingObject f = flyings[i]; //获取每一个敌人if(f.shootBy(b)){ //撞上了index = i; //记录被撞敌人的下标break; //其余敌人不再比较}}if(index != -1){ //有撞上的FlyingObject one = flyings[index]; //获取被撞的敌人对象if(one instanceof Enemy){  //若被撞对象是敌人Enemy e = (Enemy)one;  //将被撞对象强转为敌人score += e.getScore(); //累加分数}if(one instanceof Award){   //若被撞对象是奖励Award a = (Award)one;   //将被撞对象强转为奖励int type = a.getType(); //获取奖励类型switch(type){ //根据type的不同取值获取相应的奖励case Award.DOUBLE_FIRE:   //奖励类型为火力时hero.addDoubleFire(); //英雄机增火力break;case Award.LIFE:    //奖励类型为命时hero.addLife(); //英雄机增命break;}}//交换被撞敌人对象与数组中的最后一个元素FlyingObject t = flyings[index];flyings[index] = flyings[flyings.length-1];flyings[flyings.length-1] = t;//缩容(去掉最后一个元素,即:被撞敌人对象)flyings = Arrays.copyOf(flyings, flyings.length-1);}}/** 画分数 */public void paintScore(Graphics g){int x = 10;int y = 25;Font font = new Font(Font.SANS_SERIF,Font.BOLD,14);g.setColor(new Color(0x3A3B3B)); //设置颜色(纯红)g.setFont(font); //设置样式(字体:SANS_SERIF,样式:加粗,字号:24)g.drawString("SCORE: "+score,x,y); //画分y+=20;g.drawString("LIFE: "+hero.getLife(),x,y); //画命}/** 删除越界的飞行物 */public void outOfBoundsAction(){int index = 0; //1.不越界敌人数组下标  2.不越界敌人个数FlyingObject[] flyingLives = new FlyingObject[flyings.length]; //不越界敌人数组for(int i=0;i<flyings.length;i++){ //遍历所有敌人FlyingObject f = flyings[i]; //获取每一个敌人if(!f.outOfBounds()){ //不越界flyingLives[index] = f; //将不越界敌人添加到不越界敌人数组中index++; //1.下标增一  2.不越界敌人个数增一}}flyings = Arrays.copyOf(flyingLives, index); //将不越界敌人复制到flyings数组中,index为flyings的新长度index = 0; //1.下标归零  2.不越界个数归零Bullet[] bulletLives = new Bullet[bullets.length]; //不越界子弹数组for(int i=0;i<bullets.length;i++){ //遍历所有子弹Bullet b = bullets[i]; //获取每一个子弹if(!b.outOfBounds()){ //不越界bulletLives[index] = b; //将不越界子弹添加到不越界子弹数组中index++; //1.下标增一  2.不越界子弹个数增一}}bullets = Arrays.copyOf(bulletLives, index); //将不越界敌人复制到bullets数组中,index为bullets的新长度}/** 判断游戏是否结束  返回true表示游戏结束 */public boolean isGameOver(){for(int i=0;i<flyings.length;i++){ //遍历所有敌人FlyingObject f = flyings[i]; //获取每一个敌人if(hero.hit(f)){ //撞上了hero.subtractLife(); //英雄机减命hero.setDoubleFire(0); //英雄机清火力//交换被撞敌人与数组的最后一个元素FlyingObject t = flyings[i];flyings[i] = flyings[flyings.length-1];flyings[flyings.length-1] = t;//缩容(去掉最后一个元素,即:被撞的敌人对象)flyings = Arrays.copyOf(flyings,flyings.length-1);}}return hero.getLife()<=0; //命数<=0,即为游戏结束}/** 检测游戏是否结束 */public void checkGameOverAction(){if(isGameOver()){ //游戏结束时state = GAME_OVER; //当前状态改为游戏结束状态}}/** 画状态 */public void paintState(Graphics g){switch(state){ //根据当前状态画不同的图case START: //启动状态时画启动图g.drawImage(start,0,0,null);break;case PAUSE: //暂停状态时画暂停图g.drawImage(pause,0,0,null);break;case GAME_OVER: //游戏结束状态时画游戏结束图g.drawImage(gameover,0,0,null);break;}}
}

初始界面如图-1所示:


图-1
从图-1可以看出,默认分数为。,默认3条命,请看如图-2所示具体介绍。

图-2
玩家在如图-1所示的界面的任意位置,按下鼠标左键,开始游戏。界面效果如图-3所示:

图-3
开始游戏后,天空中不断有敌飞机和蜜蜂出现,英雄机发射子弹打掉敌飞机和蜜蜂以获取分数、增命或是双倍火力。如果英雄机与飞机或蜜蜂发生碰撞则减少命并且双倍火力清零直至寿命为0则游戏结束。界面效果如图-4所示:

图-4
此时点击鼠标左键,可以重新进入开始状态。另外,在游戏进行过程中,鼠标离开游戏界面,游戏将进入暂停状态,界面效果如图-5所示:

图-5
当鼠标再次移入界面时,游戏将继续进行。

飞机大战(完整代码)相关推荐

  1. python制作飞机大战代码_python实现飞机大战完整代码,可运行

    我发现很多python代码飞机大战在互联网上,但几乎没有一个是完整的.所以我做了一个完整的人.python代码分为两个文件,工具类和主类.python版本,pygame模块需要安装.完整的代码如下.1 ...

  2. 雷霆战机9.5全新上线,Python+Pygame开发飞机大战完整游戏项目(附源码)

    项目名称:太空大战 开发环境:Python3.6.4 第三方库:Pygame1.9.6 代码编辑器:Sublime Text 先来看一下游戏画面吧!  游戏画面动态且丰富哦!   需求分析 利用Pyt ...

  3. Python3飞机大战全代码(亲测OJBK)

    以下是亲测Python飞机大战全部代码,在保证有pygame环境支持并且有Python3解释器的话完全没问题! 如果大家喜欢的话麻烦点个赞! 当然没有图片的可以给小编评论留下自己的qq号并且点个赞,晚 ...

  4. python飞机大战游戏代码_python实现飞机大战游戏

    飞机大战(Python)代码分为两个python文件,工具类和主类,需要安装pygame模块,能完美运行(网上好多不完整的,调试得心累.实现出来,成就感还是满满的),如图所示: 完整代码如下: 1.工 ...

  5. Python pycharm环境 飞机大战游戏代码 以及打包成exe教程

    创建项目文件plane war,在项目文件里放入写游戏脚本需要用到的图片文件images以及新建一个新的文件plane放入py文件(main.py和sprites.py) images文件压缩包链接: ...

  6. 飞机大战java代码_[源码和文档分享]Java飞机大战游戏设计与实现

    1 概述 1.1 项目简介 本次Java课程设计是做一个飞机大战的游戏,应用Swing编程,完成一个界面简洁流畅.游戏方式简单,玩起来易于上手的桌面游戏.该飞机大战项目运用的主要技术即是Swing编程 ...

  7. python飞机大战计分代码_Python 飞机大战代码练习

    Python 飞机大战代码练习 最近在自学Python,参照代码自己写了一遍飞机大战游戏的代码.主要应用的模块为pygame.整个代码如下所示,主要分为主模块和各种精灵类定义模块,记录一下自己的学习历 ...

  8. L8-16飞机大战全部代码

    import pygame,random,time pygame.init() bg_width=400 bg_height=700 running=True bg=pygame.image.load ...

  9. python飞机大战游戏代码_用python语言如何实现飞机大战游戏

    python语言博大精深,它目前来说已经很火热了,在学好python的同时还要学会用python,可以使用它来开发一些项目最好不过了.下面小编用python实现一个小游戏-飞机大战,使用的python ...

  10. 第十三章 J20飞机游戏项目完整代码(尚学堂java300集笔记)

    第十三章 J20飞机游戏项目 DAY10-DAY11 通过键盘控制飞机前后移动,躲避炮弹,看谁坚持的时间长.如果碰到炮弹,则发生爆炸,游戏结束,并显示本次生存的时间. 图片资源 images包下存放: ...

最新文章

  1. 【Qt】Qt多屏编程,在指定显示屏上显示指定对话框
  2. 五分钟了解机器学习十大算法
  3. 审核网络安全的十大必备工具
  4. ERP_基于Oracle SOA的企业服务总线整合
  5. php 邮编正则,php抓取百度邮编搜索结果,应改如何写正则表达式?
  6. svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法
  7. 带你学python基础:变量和基本数据类型
  8. Centos设置程序开机自启的方法
  9. 面向全球用户的Teams app之夏令时篇
  10. 2018-2019-2 网络对抗技术 20165320 Exp2 后门原理与实践
  11. 互站卖的分发美化版可以封装双端APP
  12. VOA ECONOMICS REPORT - Junior Achievement Marks 90 Years of Business Education
  13. android 清空数组缓存,Android数据持久化之读写SD卡中内容的方法详解
  14. Html中锚点的使用【转】
  15. Visio使用经验汇集
  16. 全球化业务渐入佳境,BIGO盈利持续大幅提升,是时候重估欢聚集团
  17. 赛尔号周五几点服务器维护完,赛尔号手游几点刷新游戏 | 手游网游页游攻略大全...
  18. MacTex字体缺失 Error: The font “TeX Gyre Termes Math“ cannot be found.
  19. ES5 to ESNext —  自 2015 以来 JavaScript 新增的所有新特性
  20. jtag和swd区别,该用哪个?

热门文章

  1. 字符串拼接用逗号隔开的四种方法
  2. 太极拳什么时间练习最适宜
  3. JQuery读书笔记---很全面的教程
  4. 少数服从多数合理性的证明与证伪分析
  5. 二手不是垃圾,回收再生才是主流——GRS
  6. 东野奎吾--《新参者》--读后感
  7. 毛玻璃 / 玻璃拟态 处理 backdrop-filter 兼容性问题
  8. 这是50年前的一本关于30年前软件开发经验的书——《人月神话》读书笔记
  9. 使用Dumuz淘宝订单批量插旗备注
  10. 关于 类的常成员函数 声明和定义处 都需要加 const的原因