一、使用知识

Jframe

GUI

双向链表

线程

二、使用工具

IntelliJ IDEA

jdk 1.8

三、开发过程

3.1素材准备

首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以及一段优雅的音乐。

在这里插入图片描述

3.2 开发过程

3.2.1 创建项目

首先进入idea首页 open一个你想放项目的文件夹

在这里插入图片描述

进入之后右键文件名 new 一个新的Directory——Snake

在这里插入图片描述

把准备好的素材复制到文件中

在这里插入图片描述

继续创建目录 src/Sanke

在这里插入图片描述

选中src Mark Directory as — Souces 把src添加为根目录

在这里插入图片描述

3.2.2 页面设计

创建java Class 文件 Snake - new - java class SnakeName 接下来的时候会对这个SnakeName.java里面的代码不停完善

首先设置窗口格式

package Sanke;

import javax.swing.*;

/**

  • @author Swyee

    **/

    public class SnakeGame extends JFrame {

    SnakeGame(){

    this.setBounds(100, 50, 700, 500);//设置窗口大小

    this.setLayout(null);//更改layout 以便添加组件

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的状态

    this.setResizable(false);//窗口不可以改变大小

    this.setVisible(true);//设置焦点状态为true

    }

    public static void main(String[] args) {

    new SnakeGame();

    }

}

在这里插入图片描述

继续创建新的文件 SnakeGrid

package Sanke;

import java.awt.*;

/**

  • @author Swyee

    **/

    public class SnakeGrid extends Panel {

    SnakeGrid(){

    this.setBounds(0, 0, 700, 400);

    this.setBackground(Color.black);设置背景颜色

    }

}

将页面引用到SnakeGame.java中

package Sanke;

import javax.swing.*;

/**

  • @author Swyee

    **/

    public class SnakeGame extends JFrame {

    SnakeGrid snakeGrid= new SnakeGrid();

    SnakeGame(){

    this.setBounds(100, 50, 700, 500);//设置窗口大小

    this.setLayout(null);//更改layout 以便添加组件

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的状态

    this.setResizable(false);//窗口不可以改变大小

    this.add(snakeGrid);

    this.setVisible(true);//设置焦点状态为true

    }

    public static void main(String[] args) {

    new SnakeGame();

    }

}

运行样式

在这里插入图片描述

设置背景图片 背景音乐

在SnakeGrid.java中增加Music方法 设置画笔 绘图

package Sanke;

import java.applet.Applet;

import java.applet.AudioClip;

import java.awt.*;

import java.io.File;

import java.net.MalformedURLException;

import java.net.URI;

import java.net.URL;

import javax.swing.ImageIcon;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

/**

  • @author Swyee

    **/

    public class SnakeGrid extends JPanel {

    ImageIcon image = new ImageIcon("Snake/sky.jpg");//图片文件地址

    File f= new File("Snake/music.wav");//音乐文件地址

    SnakeGrid(){

    this.setBounds(0, 0, 700, 400);

    this.setBackground(Color.black);

    }

    /**

    • 设置画笔
    • @param g

      */

      @Override

      public void paint(Graphics g) {

      super.paint(g);

      image.paintIcon(this, g, 0, 0); //设置背景图片

      }

      //读取音乐文件

      void Music(){

      try {

      URI uri = f.toURI();

      URL url = uri.toURL();

      AudioClip aau= Applet.newAudioClip(url);

      aau.loop();

      } catch (MalformedURLException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      }

      }

      }

在SnakeName中调用

package Sanke;

import javax.swing.*;

/**

  • @author Swyee

    **/

    public class SnakeGame extends JFrame {

    SnakeGrid snakeGrid= new SnakeGrid();

    SnakeGame(){

    this.setBounds(100, 50, 700, 500);//设置窗口大小

    this.setLayout(null);//更改layout 以便添加组件

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的状态

    this.setResizable(false);//窗口不可以改变大小

    this.add(snakeGrid);

    //设置焦点

    snakeGrid.setFocusable(true);

    snakeGrid.requestFocus();

    snakeGrid.Music();//调用打开音乐的方法

    this.setVisible(true);//设置焦点状态为true

    }

    public static void main(String[] args) {

    new SnakeGame();

    }

}

呈现

在这里插入图片描述

3.23 画蛇

蛇的身体将会有双向链表组成,双向链表能记录一个节点的上一个节点和下一个节点。蛇的移动其实就是节点的变化,从而达到一种移动的视觉。

新建java Snake 创建节点

package Sanke;

import java.awt.Graphics;

public class Snake {

public static final int span=20;//间距

public static final String up="u";

public static final String down="d";

public static final String left="l";

public static final String right="r";

class Node{

int row;

int col;

String dir;//方向

Node next;

Node pre;

Node(int row,int col,String dir){

this.row = row;

this.col = col;

this.dir = dir;

}

public void draw(Graphics g) {

g.fillOval(colspan, rowspan, span,span);

  1. }
  2. }

}

画蛇

在snake里面增加draw()方法

/*

把蛇画出来

*/

public void draw(Graphics g) {

g.setColor(Color.yellow);

for(Node n=head;n!=null;n=n.next){

n.draw(g);

g.setColor(Color.green);

}

  1. }

在SnakeGrid.java中创建蛇

Snake snake = new Snake();//创建蛇

1

并在paint中调用snake.draw(g);

/**

* 设置画笔

* @param g

*/

@Override

public void paint(Graphics g) {

super.paint(g);

image.paintIcon(this, g, 0, 0); //设置背景图片

snake.draw(g);

}

控制蛇的移动

在snake中增加键盘调用的方法:

/*

调用键盘的上下左右键

head.dir记录现在操作的是什么按钮,从而更改蛇的状态

向上移送时,下键失效,其他四个方向也是如此判断

*/

public void keyboard(KeyEvent e) {

switch(e.getKeyCode()){

case KeyEvent.VK_UP:

if(head.dir.equals(down)){

break;

}

head.dir=up;

break;

case KeyEvent.VK_DOWN:

if(head.dir.equals(up)){

break;

}

head.dir=down;

break;

case KeyEvent.VK_LEFT:

if(head.dir.equals(right)){

break;

}

head.dir=left;

break;

case KeyEvent.VK_RIGHT:

if(head.dir.equals(left)){

break;

}

head.dir=right;

break;

default:

break;

}

}

增加头部的方法

/*

增加头部

不管移动哪个方向都是在相应位置增加一个节点

*/

public void addHead(){

Node node = null;

switch (head.dir){

case "l":

node = new Node(head.row,head.col-1,head.dir);

break;

case "r":

node = new Node(head.row,head.col+1,head.dir);

break;

case "u":

node = new Node(head.row-1,head.col,head.dir);

break;

case "d":

node = new Node(head.row+1,head.col,head.dir);

break;

default:

break;

}

node.next=head;

head.pre=node;

head=node;

  1. }

删除尾部的方法

/*

删除尾部 删除最后一个节点

*/

public void deleteTail(){

tail.pre.next=null;

tail=tail.pre;

}

增加move的方法

/*

增加move方法 一增一减,实现蛇的移动

*/

public void move() {

addHead();

deleteTail();

}

在SnakeGrid中创建一个线程类,用来执行蛇的移动方法

class SnakeThread extends Thread{

@Override

public void run() {

while (true){

try {

Thread.sleep(300);//沉睡300ms 用来控制蛇的移动速度

} catch (InterruptedException e) {

e.printStackTrace();

}

repaint();//每次沉睡完之后都执行一下repaint()方法,重新绘画

}

}

print方法中调用remove 在SnakeGrid()创建键盘监听事件:

package Sanke;

import java.applet.Applet;

import java.applet.AudioClip;

import java.awt.*;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.io.File;

import java.net.MalformedURLException;

import java.net.URI;

import java.net.URL;

import javax.swing.ImageIcon;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

/**

  • @author Swyee

    **/

    public class SnakeGrid extends JPanel {

    Snake snake = new Snake();//创建蛇

    ImageIcon image = new ImageIcon("Snake/sky.jpg");//图片文件地址

    File f= new File("Snake/music.wav");//音乐文件地址

    SnakeThread snakeThread = new SnakeThread();

    SnakeGrid(){

    this.setBounds(0, 0, 700, 400);

    this.setBackground(Color.black);

    snakeThread.start();

    this.addKeyListener(new KeyAdapter() {

    @Override

    public void keyPressed(KeyEvent e) {

    snake.keyboard(e);

    }

    });

    }

    /**

    • 设置画笔
    • @param g

      */

      @Override

      public void paint(Graphics g) {

      super.paint(g);

      image.paintIcon(this, g, 0, 0); //设置背景图片

      snake.move();//蛇移动

      snake.draw(g);

      }

      //读取音乐文件

      void Music(){

      try {

      URI uri = f.toURI();

      URL url = uri.toURL();

      AudioClip aau= Applet.newAudioClip(url);

      aau.loop();

      } catch (MalformedURLException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      }

      }

      class SnakeThread extends Thread{

      @Override

      public void run() {

      while (true){

      try {

      Thread.sleep(300);//沉睡300ms 用来控制蛇的移动速度

      } catch (InterruptedException e) {

      e.printStackTrace();

      }

      repaint();//每次沉睡完之后都执行一下repaint()方法,重新绘画

      }

      }

      }

}

执行main方法可以看到可以通过键盘进行控制移动了

3.24创建蛇的食物

增加食物的实例 以及画食物的方法 反映食物坐标的方法 新建Food.java

package Sanke;

import java.awt.*;

public class Food {

int row;

int col;

  1. Food(){
  2. row = 10;//创建食物的大小
  3. col =10;
  4. }
  5. public void repearShow(){
  6. row = (int)(Math.random()*18);//生成随机数 乘以食物的大小可以得到坐标
  7. col = (int)(Math.random()*32);
  8. }
  9. public void draw(Graphics g) {//把食物画出来
  10. g.setColor(Color.red);
  11. g.fillRect(col*20, row*20, 20, 20);//表示坐标
  12. }
  13. public Rectangle getCoordinates(){
  14. return new Rectangle(col*20,row*20,20,20);//获得食物的坐标
  15. }

}

修改Snake.java 增加判断蛇头位置的方法,修改午无参构造方法,改为有参构造,把food添加进来 修改move方法

package Sanke;

import java.awt.*;

import java.awt.event.KeyEvent;

/**

  • @author Swyee

    /

    public class Snake {

    public static final int span=20;//间距

    public static final String up="u";

    public static final String down="d";

    public static final String left="l";

    public static final String right="r";

    Node body;//蛇的身体

    Node head;//蛇的头部

    Node tail;//蛇的头部

    Food food;

    Snake(Food food){

    body = new Node(5,20,left);

    head = body;

    tail = body;

    this.food=food;

    }

    class Node{

    int row;

    int col;

    String dir;//方向

    Node next;

    Node pre;

    Node(int row,int col,String dir){

    this.row = row;

    this.col = col;

    this.dir = dir;

    }

    public void draw(Graphics g) {

    g.fillOval(col
    span, row*span, span,span);//坐标

    1. }

    }

    /*

    把蛇画出来

    */

    public void draw(Graphics g) {

    g.setColor(Color.yellow);

    for(Node n=head;n!=null;n=n.next){

    n.draw(g);

    g.setColor(Color.green);

    }

    }

    /*

    调用键盘的上下左右键

    head.dir记录现在操作的是什么按钮,从而更改蛇的状态

    向上移送时,下键失效,其他四个方向也是如此判断

    /

    public void keyboard(KeyEvent e) {

    switch(e.getKeyCode()){

    case KeyEvent.VK_UP:

    if(head.dir.equals(down)){

    break;

    }

    head.dir=up;

    break;

    case KeyEvent.VK_DOWN:

    if(head.dir.equals(up)){

    break;

    }

    head.dir=down;

    break;

    case KeyEvent.VK_LEFT:

    if(head.dir.equals(right)){

    break;

    }

    head.dir=left;

    break;

    case KeyEvent.VK_RIGHT:

    if(head.dir.equals(left)){

    break;

    }

    head.dir=right;

    break;

    default:

    break;

    }

    }

    /


    增加头部

    */

    public void addHead(){

    Node node = null;

    switch (head.dir){

    case "l":

    node = new Node(head.row,head.col-1,head.dir);

    break;

    case "r":

    node = new Node(head.row,head.col+1,head.dir);

    break;

    case "u":

    node = new Node(head.row-1,head.col,head.dir);

    break;

    case "d":

    node = new Node(head.row+1,head.col,head.dir);

    break;

    default:

    break;

    }

    node.next=head;

    head.pre=node;

    head=node;

    }

    /*

    删除尾部

    /

    public void deleteTail(){

    tail.pre.next=null;

    tail=tail.pre;

    }

    /


    增加move方法

    */

    public void move() {

    addHead();

    if(this.getSnakeRectangle().intersects(food.getCoordinates())){//当蛇头与食物重合的时候 蛇吃食物 食物刷新,不再删除尾巴,达到一种蛇增长的要求

    1. food.repearShow();
    2. }else{
    3. deleteTail();
    4. }

    }

    public Rectangle getSnakeRectangle(){//获取蛇头的坐标

    1. return new Rectangle(head.col*span,head.row*span,span,span);

    }

    }

在修改snakegrid.java 贪吃蛇的功能就基本实现了

Food food = new Food();

Snake snake = new Snake(food);//创建蛇

ImageIcon image = new ImageIcon("Snake/sky.jpg");//图片文件地址

File f= new File("Snake/music.wav");//音乐文件地址

SnakeThread snakeThread = new SnakeThread();

1

2

3

4

5

@Override

public void paint(Graphics g) {

super.paint(g);

image.paintIcon(this, g, 0, 0); //设置背景图片

snake.move();//蛇移动

snake.draw(g);

food.draw(g);

}

3.2.5增加蛇的存活状态

在Snake中增加蛇的存活状态,每一次移动都判断下是否存活,修改SnakeGrid的线程,执行时进行判断是否存活

public void DeadOrLive(){//超出边框范围 蛇头撞到身体 游戏结束

if(head.row<0 || head.row>rows-1 || head.col<0 ||head.col>cols){

islive=false;

}

for(Node n=head.next;n!=null;n=n.next){

if(n.colhead.col && n.rowhead.row){

islive=false;

}

}

  1. }

public void move() {

addHead();

if(this.getSnakeRectangle().intersects(food.getCoordinates())){//当蛇头与食物重合的时候 蛇吃食物 食物刷新,不再删除尾巴,达到一种蛇增长的要求

  1. food.repearShow();
  2. }else{
  3. deleteTail();
  4. }
  5. DeadOrLive();//每移动一步都要判断一下是否存活
  6. }

class SnakeThread extends Thread{

boolean flag = true;

@Override

public void run() {

while (Snake.islive && flag) {

try {

Thread.sleep(300);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

if (Snake.islive ) {

repaint();

}

  1. }
  2. if (!flag == false) {
  3. JOptionPane.showMessageDialog(SnakeGrid.this, "游戏结束");
  4. }
  5. }

3.2.6 增加按钮

最后的时候,给这个小游戏增加几个按钮,用来实现暂停开始

新建Button.java

package Sanke;

import javax.swing.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

public class Button extends JPanel{

public static boolean isMove=true;//表示运行状态

SnakeGrid snakeGrid;

Button(SnakeGrid snakeGrid){

this.snakeGrid=snakeGrid;

this.setBounds(0, 400, 700, 100);

JButton jb1 = new JButton("暂停游戏");

JButton jb2 = new JButton("继续游戏");

JButton jb3 = new JButton("重新游戏");

this.add(jb1);

this.add(jb2);

this.add(jb3);

jb1.addActionListener(new ActionListener() {

  1. @Override
  2. public void actionPerformed(ActionEvent e) {
  3. isMove=false;
  4. }
  5. });
  6. jb2.addActionListener(new ActionListener() {
  7. @Override
  8. public void actionPerformed(ActionEvent e) {
  9. isMove=true;
  10. snakeGrid.setFocusable(true);
  11. snakeGrid.requestFocus();
  12. }
  13. });
  14. jb3.addActionListener(new ActionListener() {
  15. @Override
  16. public void actionPerformed(ActionEvent e) {//重新创建蛇等 重新开始游戏
  17. snakeGrid.snakeThread.stopThread();
  18. Food food = new Food();
  19. snakeGrid.food=food;
  20. snakeGrid.snake=new Snake(food);
  21. Snake.islive=true;
  22. isMove=true;
  23. SnakeGrid.SnakeThread st = snakeGrid.new SnakeThread();
  24. snakeGrid.snakeThread=st;
  25. st.start();
  26. snakeGrid.setFocusable(true);
  27. snakeGrid.requestFocus();
  28. }
  29. });

}

}

再修改SnakeGrid中的thread

package Sanke;

import java.applet.Applet;

import java.applet.AudioClip;

import java.awt.*;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.io.File;

import java.net.MalformedURLException;

import java.net.URI;

import java.net.URL;

import javax.swing.ImageIcon;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

/**

  • @author Swyee

    **/

    public class SnakeGrid extends JPanel {

    Food food = new Food();

    Snake snake = new Snake(food);//创建蛇

    ImageIcon image = new ImageIcon("Snake/sky.jpg");//图片文件地址

    File f= new File("Snake/music.wav");//音乐文件地址

    SnakeThread snakeThread = new SnakeThread();

    SnakeGrid(){

    this.setBounds(0, 0, 700, 400);

    this.setBackground(Color.black);

    snakeThread.start();

    this.addKeyListener(new KeyAdapter() {

    @Override

    public void keyPressed(KeyEvent e) {

    snake.keyboard(e);

    }

    });

    }

    /**

    • 设置画笔

    • @param g

      */

      @Override

      public void paint(Graphics g) {

      super.paint(g);

      image.paintIcon(this, g, 0, 0); //设置背景图片

      snake.move();//蛇移动

      snake.draw(g);

      food.draw(g);

      }

      //读取音乐文件

      void Music(){

      try {

      URI uri = f.toURI();

      URL url = uri.toURL();

      AudioClip aau= Applet.newAudioClip(url);

      aau.loop();

      } catch (MalformedURLException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      }

      }

      class SnakeThread extends Thread{

      boolean flag = true;

      @Override

      public void run() {

      while(Snake.islive &&flag){

      try {

      Thread.sleep(300);

      } catch (InterruptedException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

      }

      if(Snake.islive&& Button.isMove){

      repaint();

      }

      1. }
      2. if(!flag==false){
      3. JOptionPane.showMessageDialog(SnakeGrid.this, "游戏结束");
      4. }

      }

      public void stopThread(){

      flag=false;

      }

      }

      }

在主页面中把按钮添加上去

package Sanke;

import javax.swing.*;

/**

  • @author Swyee

    **/

    public class SnakeGame extends JFrame {

    SnakeGrid snakeGrid= new SnakeGrid();

    Button button = new Button(snakeGrid);

    SnakeGame(){

    this.setBounds(100, 50, 700, 500);//设置窗口大小

    this.setLayout(null);//更改layout 以便添加组件

    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭窗口的状态

    this.setResizable(false);//窗口不可以改变大小

    this.add(snakeGrid);

    this.add(button);

    //设置焦点

    snakeGrid.setFocusable(true);

    snakeGrid.requestFocus();

    snakeGrid.Music();//调用打开音乐的方法

    this.setVisible(true);//设置焦点状态为true

    }

    public static void main(String[] args) {

    new SnakeGame();

    }

}

在这里插入图片描述

到这里这个小游戏就全部做完了,当然也可以在其基础上增加其他功能

也可以把这个小游戏打成jar包的形式进行运行

,将打好的jar包和资源文件放在同一个目录下,即可正常运行访问

四 打jar包

idea打jar包方式:

https://blog.csdn.net/qq_44433261/article/details/107433540

命令行运行jar包方式:

https://blog.csdn.net/qq_44433261/article/details/107433355

源码

最后附上源码链接:

链接: https://pan.baidu.com/s/1iUmSUnvpi_YKUNsPs3ugIQ 提取码: zxsk

Java经典小游戏——贪吃蛇简单实现(附源码)的更多相关文章

  1. 用Python实现童年小游戏贪吃蛇

    贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中.

  2. 第一个windows 小游戏 贪吃蛇

    最近用dx尝试做了一个小的贪吃蛇游戏,代码放到github上面:https://github.com/nightwolf-chen/MyFreakout 说一下自己实现的过程: 首先,我把蛇这个抽象成 ...

  3. JavaScript面向对象编程小游戏---贪吃蛇

    1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1- 2 维护非常方便并且成本较低. ​ 2 这个demo是采用了 ...

  4. Java小游戏贪吃蛇

    package snake; import java.awt.BorderLayout;import java.awt.Canvas;import java.awt.Color;import java ...

  5. 使用JavaScript实现简单的小游戏-贪吃蛇

    最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...

  6. Java_GUI小游戏--贪吃蛇

    贪吃蛇游戏:是一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或 ...

  7. 用Canvas制作小游戏——贪吃蛇

    今天呢,主要和小伙伴们分享一下一个贪吃蛇游戏从构思到实现的过程~因为我不是很喜欢直接PO代码,所以只copy代码的童鞋们请出门左转不谢. 按理说canvas与其应用是老生常谈了,可我在准备阶段却搜索不 ...

  8. python【控制台】小游戏--贪吃蛇

    传统贪吃蛇相信大家都玩过,也是一款很老很经典的游戏,今天我们用python控制台实现 项目有很多bug没有解决,因为本人一时兴起写的一个小游戏,所以只是实现可玩部分功能,并没有花较多的时间和精力去维护 ...

  9. 手把手教学h5小游戏 - 贪吃蛇

    简单的小游戏制作,代码量只有两三百行.游戏可自行扩展延申. 源码已发布至github,喜欢的点个小星星,源码入口:game-snake 游戏已发布,游戏入口:http://snake.game.yan ...

随机推荐

  1. python爬虫 selenium 抓取 今日头条(ajax异步加载)

    from selenium import webdriver from lxml import etree from pyquery import PyQuery as pq import time ...

  2. Flink处理函数实战之四:窗口处理

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. [原题复现][CISCN 2019 初赛]WEB-Love Math(无参数RCE)[未完结]

    简介  原题复现:  考察知识点:无参数命令执行  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 源码审计 代码 1 ...

  4. phpmyadmin 4.8.1任意文件包含(CVE-2018-12613)

    简介 环境复现:https://gitee.com/xiaohua1998/hctf_2018_warmup 考察知识点:文件包含漏洞(phpmyadmin 4.8.1任意文件包含) 线上平台:榆林学 ...

  5. python3基础2

    # 列表(list.数组).元组.字典 list_ = ["a", "c", 1, 2] print(list_) # list_.append("c ...

  6. 这份SpringMVC执行原理笔记,建议做java开发的好好看看,总结的很详细!

    什么是SpringMVC? Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供的web模块,包含了开发Web 应用程 ...

  7. Contest 1435

    A \(x\times-y+y\times x=0\),因为 \(n\) 是偶数,所以两两这样构造即可. 时间复杂度 \(O\left(Tn\right)\). B 有点绕的题,要理清思路. 发现行和 ...

  8. MySQL查询练习2

    MySQL查询练习2 导读: 本次MySQL的查询语句是本人考试题目: 所有题目都已通过: 该查询练习并没有sql文件进行检查: 如果有书写以及其他错误欢迎指出. 题目正文: 1.找出借书超过5本的借 ...

  9. TkMybatis 是什么?

    一.TkMybatis Tkmybatis 是基于 Mybatis 框架开发的一个工具,通过调用它提供的方法实现对单表的数据操作,不需要写任何 sql 语句,这极大地提高了项目开发效率. 二.怎么用? ...

  10. ios中关于系统定位CLLocationManager的使用解析

    //1.添加定位管理委托协议 CLLocationManagerDelegate //2.初始化定位管理对象 self.locationManager=[[CLLocationManager allo ...