开头


参考自尚学堂

对代码有一定的重构,功能的添加(按‘G’开挂)

文末源码自取,不会 github、git 建议先去学会基本使用,
也可以在对应界面直接下载压缩包


项目结构

GamePanel

KeyMonitor (内部类)

keyPressed(KeyEvent): void

keyReleased(KeyEvent): void

launch(): void

paint(Graphics): void

main(String[]): void

package com.company.tank;
import javax.swing.*;
import java .awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class GamePanel extends JFrame {/** 定义双缓存图片 */private Image offScreenImage = null;//游戏状态: 0 游戏未开始,1 单人模式,2 双人模式, 3 游戏暂停, 4 游戏失败,5 游戏成功public int state= 0;//临时变量private int a = 1;//重绘次数public int count = 0;//窗口长宽private int width = 800;private int height = 610;//敌人数量private int enemyCount = 0;//高度private int y = 150;//是否开始private boolean start = false;//物体集合public List<Bullet> bulletList = new ArrayList<>();public List<Bot> botList = new ArrayList<>();public List<Tank> tankList = new ArrayList<>();public List<Wall> wallList = new ArrayList<>();public List<Bullet> removeList = new ArrayList<>();public List<Base> baseList = new ArrayList<>();public List<BlastObj> blastList = new ArrayList<>();//背景图片public Image background = Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/background.jpg"));//指针图片private Image select = Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/selecttank.gif"));//基地private Base base = new Base(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/star.gif"))
, 365, 560, this);//玩家private PlayerOne playerOne = new PlayerOne(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankU.gif")),125, 510,Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankU.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankD.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankL.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player1/p1tankR.gif")), this);private PlayerTwo playerTwo = new PlayerTwo(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankU.gif")),625, 510,Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankU.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankD.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankL.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/player2/p2tankR.gif")), this);//窗口的启动方法public void launch(){//标题setTitle("坦克大战");//窗口初始大小setSize(width, height);//用户不能调整大小setResizable(false);//使窗口可见setVisible(true);//获取屏幕分辨率,使窗口生成时居中setLocationRelativeTo(null);//添加关闭事件setDefaultCloseOperation(EXIT_ON_CLOSE);//添加键盘事件this.addKeyListener(new GamePanel.KeyMonitor());//添加围墙 60*60for(int i = 0; i< 14; i ++){wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), i*60 ,170, this ));}wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 305 ,560,this ));wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 305 ,500,this ));wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 365 ,500,this ));wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 425 ,500,this ));wallList.add(new Wall(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/walls.gif")), 425 ,560,this ));//添加基地baseList.add(base);while (true){if(botList.size() == 0 && enemyCount == 10){state = 5;}if(tankList.size() == 0 && (state == 1 || state == 2)){state = 4;}if(state == 1 || state == 2){if (count % 100 == 1 && enemyCount < 10) {Random r = new Random();int rnum =r.nextInt(800);botList.add(new Bot(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/enemy/enemy1U.gif")), rnum, 110,Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/enemy/enemy1U.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/enemy/enemy1D.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/enemy/enemy1L.gif")),Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/enemy/enemy1R.gif")), this));enemyCount++;}}repaint();try {//线程休眠Thread.sleep(25);}catch (Exception e){e.printStackTrace();}}}@Overridepublic void paint(Graphics g) {// 创建和容器一样大小的Image图片if(offScreenImage ==null){offScreenImage=this.createImage(width, height);}// 获得该图片的画布Graphics gImage= offScreenImage.getGraphics();// 背景颜色gImage.setColor(Color.gray);// 填充整个画布gImage.fillRect(0, 0, width, height);//改变画笔的颜色gImage.setColor(Color.orange);//改变文字大小和样式gImage.setFont(new Font("正楷",Font.BOLD,50));if(state == 0){//添加文字gImage.drawString("选择游戏模式",220,100);gImage.drawString("单人游戏",220,200);gImage.drawString("双人游戏",220,300);gImage.drawString("按1,2选择模式,按回车开始游戏",0,400);gImage.drawImage(select,160,y,null);}else if(state == 1||state == 2){gImage.setColor(Color.red);gImage.setFont(new Font("仿宋",Font.BOLD,20));gImage.drawString("WASD控制移动",0,510);gImage.drawString("空格射击",0,550);if(state == 2){gImage.drawString("方向键控制移动",575,510);gImage.drawString("K射击",575,550);}//paint重绘游戏元素for(Tank tank : tankList){tank.paintSelf(gImage);}for(Bullet bullet: bulletList){bullet.paintSelf(gImage);}bulletList.removeAll(removeList);for(Bot bot: botList){bot.paintSelf(gImage);}for (Wall wall: wallList){wall.paintSelf(gImage);}for(Base base : baseList){base.paintSelf(gImage);}for(BlastObj blast : blastList){blast.paintSelf(gImage);}//重绘次数+1count++;}else if(state == 3){gImage.drawString("游戏暂停",220,200);}else if(state == 4){gImage.drawString("游戏失败",220,200);}else if(state == 5){gImage.drawString("游戏胜利",220,200);}/* 将缓冲区绘制好的图形整个绘制到容器的画布中 */g.drawImage(offScreenImage, 0, 0, null);}private class KeyMonitor extends KeyAdapter {@Overridepublic void keyPressed(KeyEvent e) {//super.keyPressed(e);int key = e.getKeyCode();switch (key){case KeyEvent.VK_1:y = 150;a = 1;break;case KeyEvent.VK_2:y = 250;a = 2;break;case KeyEvent.VK_ENTER:state = a;//添加玩家if(state == 1 && !start){tankList.add(playerOne);}else{tankList.add(playerOne);tankList.add(playerTwo);}start = true;break;case KeyEvent.VK_P:if(state != 3){a = state;state = 3;}else{state = a;if(a == 0) {a = 1;}}break;default:playerOne.keyPressed(e);playerTwo.keyPressed(e);break;}}@Overridepublic void keyReleased(KeyEvent e){playerOne.keyReleased(e);playerTwo.keyReleased(e);}}public static void main(String[] args) {GamePanel gamePanel = new GamePanel();gamePanel.launch();}
}

GameObject

GameObject()

GameObject(Image, int, int, GamePanel)

getImg(): Image

setImg(Image): void

对X,Y,Width,Height,Speed,GamePanel 的getter和setter

paintSelf(Graphics): void

getRec(): Rectangle

package com.company.tank;import java.awt.*;public abstract class GameObject {//游戏元素图片Image img;//游戏元素的横坐标int x;//游戏元素的纵坐标int y;//游戏元素的宽int width;//游戏元素的高int height;//游戏元素的移动速度int speed;//游戏元素的移动方向Direction direction;//引入主界面GamePanel gamePanel;public GameObject(){}public GameObject(Image img, int x, int y, GamePanel gamePanel) {this.img = img;this.x = x;this.y = y;this.gamePanel = gamePanel;}public Image getImg() {return img;}public void setImg(Image img) {this.img = img;}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 double getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public GamePanel getGamePanel() {return gamePanel;}public void setGamePanel(GamePanel gamepanel) {this.gamePanel = gamePanel;}//继承元素绘制自己的方法public abstract void paintSelf(Graphics g);//获取当前游戏元素的矩形,是为碰撞检测而写(位置)public abstract Rectangle getRec();
}

Base

Base(Image, int, int, GamePanel)

paintSelf(Graphics): void

getRec(): Rectangle

package com.company.tank;import java.awt.*;public class Base extends GameObject {public int width = 60;public int height = 60;public Base(Image img, int x, int y, GamePanel gamePanel){super(img, x, y, gamePanel);}@Overridepublic void paintSelf(Graphics g) {g.drawImage(img, x, y, null);}@Overridepublic Rectangle getRec() {return new Rectangle(x, y, width, height);}
}

Wall

Wall(Image, int, int, GamePanel)

paintSelf(Graphics): void

getRec(): Rectangle

package com.company.tank;
import java.awt.*;public class Wall extends GameObject {public int width = 60;public int height = 60;public Wall(Image img, int x, int y, GamePanel gamePanel){super(img, x, y, gamePanel);}@Overridepublic void paintSelf(Graphics g) {g.drawImage(img, x, y, null);}@Overridepublic Rectangle getRec() {return new Rectangle(x, y, width, height);}
}

Tank

AttackCD

run(): void

Tank(Image, int, int, Image, Image, Image, Image, …)

leftward(): void //移动

rightward(): void

upward(): void

downward(): void

attack(): void

hitWall(int, int): boolean

moveToBorder(int, int): boolean

getHeadPoint(): Point

paintSelf(Graphics): void

getRec(): Rectangle

package com.company.tank;import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.List;public class Tank extends GameObject{private boolean attackCoolDown =true;//攻击冷却状态private int attackCoolDownTime =1000;//攻击冷却时间毫秒间隔1000ms发射子弹private Image upImage; //向上移动时的图片private Image downImage;//向下移动时的图片private Image rightImage;//向右移动时的图片private Image leftImage;//向左移动时的图片boolean alive = true;//坦克sizeint width = 40;int height = 50;//坦克初始方向Direction direction = Direction.UP;//坦克速度private int speed = 3;//坦克头部坐标Point p;//坦克坐标,方向,图片,方向,面板public Tank(Image img, int x, int y, Image upImage, Image downImage, Image leftImage, Image rightImage, GamePanel gamePanel) {super(img, x, y, gamePanel);this.upImage = upImage;this.leftImage = leftImage;this.downImage = downImage;this.rightImage = rightImage;}public void leftward(){direction = Direction.LEFT;setImg(leftImage);if(!hitWall(x-speed, y) && !moveToBorder(x-speed, y) && alive){this.x -= speed;}}public void rightward(){direction = Direction.RIGHT;setImg(rightImage);if(!hitWall(x+speed, y) && !moveToBorder(x+speed, y) && alive){this.x += speed;}}public void upward(){direction = Direction.UP;setImg(upImage);if(!hitWall(x, y-speed) && !moveToBorder(x, y- speed) && alive){this.y -= speed;}}public void downward(){direction = Direction.DOWN;setImg(downImage);if(!hitWall(x, y+speed) && !moveToBorder(x, y+speed) && alive){this.y += speed;}}public void attack(){Point p = getHeadPoint();if(attackCoolDown && alive){Bullet bullet = new Bullet(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/bullet/bulletGreen.gif")),p.x,p.y,direction, this.gamePanel);this.gamePanel.bulletList.add(bullet);attackCoolDown = false;new AttackCD().start();}}public boolean hitWall(int x, int y){//假设玩家坦克前进,下一个位置形成的矩形Rectangle next = new Rectangle(x, y, width, height);//地图里所有的墙体List<Wall> walls = this.gamePanel.wallList;//判断两个矩形是否相交(即是否撞墙)for(Wall w:walls){if(w.getRec().intersects(next)){return true;}}return false;}public boolean moveToBorder(int x, int y){if(x < 0){return true;}else if(x > this.gamePanel.getWidth()-width){return true;}if(y < 0){return true;}else if(y > this.gamePanel.getHeight()-height){return true;}return false;}public class AttackCD extends Thread{public void run(){attackCoolDown=false;//将攻击功能设置为冷却状态try{Thread.sleep(attackCoolDownTime);//休眠1秒}catch(InterruptedException e){e.printStackTrace();}attackCoolDown=true;//将攻击功能解除冷却状态this.interrupt();}}//根据方向确定头部位置,x和y是左下角的点public Point getHeadPoint(){switch (direction){case UP:return new Point(x + width/2, y );case LEFT:return new Point(x, y + height/2);case DOWN:return new Point(x + width/2, y + height);case RIGHT:return new Point(x + width, y + height/2);default:return null;}}@Overridepublic void paintSelf(Graphics g) {g.drawImage(img, x, y, null);}@Overridepublic Rectangle getRec() {return new Rectangle(x, y, width, height);}
}

PlayerOne

PlayerOne(Image, int, int, Image, Image, Image, Image, …)

keyPressed(KeyEvent): void

keyReleased(KeyEvent): void

move(): void

paintSelf(Graphics): void

getRec(): Rectangle

package com.company.tank;import java.awt.*;
import java.awt.event.KeyEvent;public class PlayerOne extends Tank {private boolean up = false;private boolean left = false;private boolean right = false;private boolean down = false;public PlayerOne(Image img, int x, int y, Image upImage, Image downImage, Image leftImage, Image rightImage, GamePanel gamePanel){super(img, x, y, upImage, downImage, leftImage, rightImage, gamePanel);}public void keyPressed(KeyEvent e){int key = e.getKeyCode();switch (key){case KeyEvent.VK_A:left = true;break;case KeyEvent.VK_S:down = true;break;case KeyEvent.VK_D:right = true;break;case KeyEvent.VK_W:up = true;break;case KeyEvent.VK_SPACE:this.attack();break;case KeyEvent.VK_G: // 开挂:清除现存敌方坦克中存活最久的一个Bot b = this.gamePanel.botList.remove(0);gamePanel.botList.remove(b);gamePanel.blastList.add(new BlastObj(b.x, b.y));break;//TODO gdefault:break;}}public void keyReleased(KeyEvent e){int key = e.getKeyCode();switch (key){case KeyEvent.VK_A:left = false;break;case KeyEvent.VK_S:down = false;break;case KeyEvent.VK_D:right = false;break;case KeyEvent.VK_W:up = false;break;default:break;}}public void move(){ // 根据状态前进/停止if(left){leftward();}else if(right){rightward();}else if(up){upward();}else if(down){downward();}}public void paintSelf(Graphics g) {g.drawImage(img, x, y, null);move();}public Rectangle getRec() {return new Rectangle(x, y, width, height);}
}

添加player只需要改名

Bot

Bot(Image, int, int, Image, Image, Image, Image, …)

go(): void

randomDirection(): Direction

attack(): void

paintSelf(Graphics): void

getRec(): Rectangle

package com.company.tank;
import java.awt.*;
import java.util.Random;public class Bot extends Tank{int moveTime = 0;public Bot(Image img, int x, int y, Image upImage, Image downImage, Image leftImage, Image rightImage, GamePanel gamePanel) {super(img, x, y, upImage, downImage, leftImage, rightImage, gamePanel);}public void go(){attack();if(moveTime>=20) {direction=randomDirection();moveTime=0;}else {moveTime+=1;}switch (direction) {case UP -> upward();case DOWN -> downward();case RIGHT -> rightward();case LEFT -> leftward();}}//电脑坦克随机方向public Direction randomDirection() {Random r = new Random();int rnum = r.nextInt(4);switch(rnum) {case 0:return Direction.UP;case 1:return Direction.RIGHT;case 2:return Direction.LEFT;default:return Direction.DOWN;}}//只有4%几率攻击public void attack() {Point p = getHeadPoint();Random r = new Random();int rnum =r.nextInt(100);if(rnum<4) {EnemyBullet enemyBullet = new EnemyBullet(Toolkit.getDefaultToolkit().getImage(getClass().getResource("images/bullet/bulletYellow.gif")),p.x,p.y,direction,gamePanel);this.gamePanel.bulletList.add(enemyBullet);}}@Overridepublic void paintSelf(Graphics g) {g.drawImage(img,x,y,null);this.go();}@Overridepublic Rectangle getRec() {return new Rectangle(x, y, width, height);}
}

Bullet

Bullet(Image, int, int, Direction, GamePanel)

go(): void

leftward(): void

rightward(): void

upward(): void

downward(): void

hitBot(): void //碰撞检测

hitBase(): void

hitWall(): void

moveToBorder(): void

paintSelf(Graphics): void

getRec(): Rectangle

package com.company.tank;import java.awt.*;
import java.util.List;public class Bullet extends GameObject{private  int width = 10;private int height = 10;private int speed = 7;Direction direction;public Bullet(Image img, int x, int y, Direction direction,GamePanel gamePanel) {super(img, x,  y, gamePanel);this.direction = direction;}public void go(){/*判断移动方向*/switch (direction) {case UP -> upward();case LEFT -> leftward();case DOWN -> downward();case RIGHT -> rightward();}}// 子弹移动+边界判断public void leftward(){x -= speed;moveToBorder();}public void rightward(){x += speed;moveToBorder();}public void upward(){y -= speed;moveToBorder();}public void downward(){y += speed;moveToBorder();}/*子弹与坦克碰撞检测*/public void hitBot(){Rectangle next= this.getRec();List<Bot> bots = this.gamePanel.botList;//子弹和botfor(Bot bot: bots){if(bot.getRec().intersects(next)){ // 空间有交集this.gamePanel.blastList.add(new BlastObj(bot.x-34, bot.y-14));this.gamePanel.botList.remove(bot);this.gamePanel.removeList.add(this); // 回收子弹break;}}}public void hitBase(){Rectangle next = this.getRec();for(Base base: gamePanel.baseList) {if (base.getRec().intersects(next)) {this.gamePanel.baseList.remove(base);this.gamePanel.removeList.add(this);this.gamePanel.state = 4;break;}}}public void hitWall(){Rectangle next = this.getRec();List<Wall> walls = this.gamePanel.wallList;for(Wall w: walls) {if (w.getRec().intersects(next)) {this.gamePanel.wallList.remove(w);this.gamePanel.removeList.add(this);break;}}}// 出界回收public void moveToBorder(){if (x < 0||x > this.gamePanel.getWidth()) {this.gamePanel.removeList.add(this);}if(y < 0||y > this.gamePanel.getHeight()) {this.gamePanel.removeList.add(this);}}@Overridepublic void paintSelf(Graphics g) {g.drawImage(img, x, y, null);go();//碰撞检测hitBot();hitWall();hitBase();}@Overridepublic Rectangle getRec() {return new Rectangle(x, y, width, height);}
}

EnemyBullet

EnemyBullet(Image, int, int, Direction, GamePanel)

hitTank(): void

paintSelf(Graphics): void

package com.company.tank;import java.awt.*;
import java.util.List;public class EnemyBullet extends Bullet {public EnemyBullet(Image img, int x, int y, Direction direction,GamePanel gamePanel){super(img, x, y, direction, gamePanel);}public void hitTank(){Rectangle next= this.getRec();java.util.List<Tank> tanks = this.gamePanel.tankList;//子弹和Tankfor(Tank tank: tanks){if(tank.getRec().intersects(next)){tank.alive = false;this.gamePanel.blastList.add(new BlastObj(tank.x-34, tank.y-14));this.gamePanel.tankList.remove(tank);this.gamePanel.removeList.add(this);break;}}}public void paintSelf(Graphics g){g.drawImage(img, x, y, null);go();hitBase();hitWall();hitTank();}
}

BlastObj

BlastObj()

BlastObj(int, int)

init(): void

paintSelf(Graphics): void

getRec(): Rectangle

package com.company.tank;import java.awt.*;public class BlastObj extends GameObject {static Image[] imgs = new Image[3];int explodeCount = 0;public static void init() { // 初始化for (int i = 0; i < 3; i++) {imgs[i] = Toolkit.getDefaultToolkit().getImage(BlastObj.class.getResource("images/blast/blast" +(i + 1)+".png"));}}public BlastObj() {super();}public BlastObj(int x, int y) {this.x = x;this.y = y;init();}@Overridepublic void paintSelf(Graphics g) {//绘制点击爆炸效果(连续绘制)if (explodeCount < 3 && explodeCount>=0){g.drawImage(imgs[explodeCount],x,y,null);explodeCount++;}}@Overridepublic Rectangle getRec() {return null;}
}

Direction

public enum Direction {UP,LEFT,RIGHT,DOWN
}

图片添加

这里跳转查看


最后

不定时更新,以后会重构。

源码

已更新为github链接

Java实现坦克大战(源码全)相关推荐

  1. java版坦克大战源码分享

    前言 利用摸鱼时间学了个java的游戏引擎FXGL 本游戏是基于jdk17和FXGL开发的 操作 按键 功能 WSAD 移动 空格 发射子弹 E 使用技能 道具说明 道具 玩家吃到 敌人吃到 星星 子 ...

  2. android坦克大战源代码,android的坦克大战 - 源码下载|源代码 - 源码中国

    压缩包 : TankWar坦克大战.rar 列表 TankWar坦克大战\TankWar\.classpath TankWar坦克大战\TankWar\.project TankWar坦克大战\Tan ...

  3. java 坦克重叠_Java实现支持双黑两人激战的 坦克大战源码(经典游戏)

    写这个游戏已经有一段时间了,一直在实现各种新功能,从最开始的地图上只有坦克,发子弹还是一个大问题到现在可以两个人一起玩,还是花了不少心思的,现在坦克的速度更快,电脑坦克也不会撞墙.虽然游戏性没有经典坦 ...

  4. 【180718】FC经典坦克大战源码

    采用VB.NET开发的经典坦克大战FC游戏源码,模拟任天堂的坦克大战.全开源代码,测试请注意开启键盘大写.控制方式:大写的J K L I 控制坦克方向,F发弹. 注意事项: 开发环境为Visual S ...

  5. Python实现坦克大战源码

    Python实现坦克大战小游戏源码,可实现单人及双人模式. import sysimport pygameimport sceneimport bulletimport foodimport tank ...

  6. c#写的坦克大战源码

    实现坦克大战的基本功能 1.初始化地图 2.坦克的出身 3.敌人坦克到的随机出现 4.子弹的发射.爆炸等等 运行环境:vs2010

  7. java版坦克大战_java版坦克大战 - 源码下载|源代码 - 源码中国

    压缩包 : MytangGame4.rar 列表 MytangGame4\.classpath MytangGame4\.project MytangGame4\.settings\org.eclip ...

  8. java坦克大战源码下载

    HJZGG: https://github.com/hjzgg/hjzgg_tank_java 解压之后运行可执行jar包即可!效果图如下: v 1.游戏开始 v 2.选择地图 v 3.开始游戏 v ...

  9. c语言坦克大战程序设计,C语言坦克大战源码分析

    /* Note:Your choice is C IDE */ #include "graphics.h" #include "stdlib.h" #inclu ...

  10. Java实现坦克大战,单机版和联网版

    Java实现坦克大战 源码获取途径 部分源代码 源码获取途径 百度网盘链接: 百度网盘地址 提取码:5r7i GitHub Github获取地址 部分源代码 public class TankClie ...

最新文章

  1. 在项目中同时使用Objective-C和Swift
  2. linux有三个查看文件的命令:more、cat、less
  3. Android与Javascript交互示例(二)
  4. linux wait 子孙进程,Linux-进程基础
  5. Windows 集成 FTP 服务器配置–WS08R2已验证
  6. TCP连接保活之Keepalive
  7. C#中的Attributes的用法
  8. Oracle11g安装包下载
  9. dosbox使用教程
  10. 桌面计算机图标变黑块,win7桌面图标变成有黑色方块怎么办?4个步骤轻松搞定...
  11. 阿里某程序员吐槽:绩效375同事离职被批准,绩效325同事离职却被卡
  12. oracle最小值寒素,新人教版备考2020年浙江中考语文复习专题:基础知识与古诗文专项特训(五十六)D卷...
  13. C# Panel半透明
  14. 白杨SEO:淘宝客、淘客是什么、赚钱方式及怎么入门和推广引流?
  15. 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘
  16. 股票价格中后取复权的计算
  17. 单枪匹马:4年只做一个iOS游戏 收入破千万美元
  18. java小系统 数据库 图书馆
  19. 《钢琴调律师 五级》 笔记
  20. opencv 表识别 工业表智能识别 数字式表盘识别,指针式表盘刻度识别,分为表检测,表盘纠正,刻度分割,刻度拉直识别

热门文章

  1. abaqus算出来的转角单位是什么_ABAQUS中的单位制是如何规定的;
  2. Abaqus 两套常用单位
  3. 看不懂简明python教程_简明python教程
  4. HackerRank 算法刷题笔记(一),基于Go语言
  5. 屏幕尺寸、分辨率、DPI、PPI
  6. cfe刷机教程 斐讯k3_PHICOMM 斐讯 K3 路由器 刷机教程
  7. 安卓计步器是如何实现计步的
  8. 代码对比工具,我就用这6个
  9. 客户端的云桌面平台配置与开启(附,登录“云电脑”与切换登录账号)
  10. mysql 触发器 insert new_mysql触发器实例 插入前更新数据