<legend id='kig2iuxo'><style id='0mc5kzv4'><dir id='2de1y36q'><q id='fa394rfi'></q></dir></style></legend>
    • <bdo id='n5tksw0x'></bdo><ul id='5ul040iy'></ul>
  1. <tfoot id='p75hx8wz'></tfoot>
    <i id='n8g4k84z'><tr id='e7p9tmao'><dt id='2bq4ofv5'><q id='ztmpp7b3'><span id='0d9gl2ar'><b id='8mgdnw3s'><form id='0z4ga7e4'><ins id='9yydq3ce'></ins><ul id='7ma72jo0'></ul><sub id='2xismpxy'></sub></form><legend id='k8s6csn9'></legend><bdo id='x9gunz0o'><pre id='fjaenm9j'><center id='omjmfvas'></center></pre></bdo></b><th id='1bouohhb'></th></span></q></dt></tr></i><div id='l2h0bvoc'><tfoot id='mcx3va5y'></tfoot><dl id='zuskburs'><fieldset id='r6a4ou0q'></fieldset></dl></div>

      <small id='77xlclug'></small><noframes id='kgy51tcv'>

      欢迎来到入门教程网!

      Java编程

      当前位置:主页 > 软件编程 > Java编程 >

      java源代码大全小程序 java代码源码

      来源:本站原创|时间:2023-04-11|栏目:Java编程|点击:

      求一段JAVA编写的贪吃蛇小程序源代码

      用MVC方式实现的贪吃蛇游戏,共有4个类。运行GreedSnake运行即可。主要是观察者模式的使用,我已经添加了很多注释了。

      1、

      /*

      * 程序名称:贪食蛇

      * 原作者:BigF

      * 修改者:algo

      * 说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者,

      * 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之

      * 下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式,

      * 因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。

      * 我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。

      */

      package mvcTest;

      /**

      * @author WangYu

      * @version 1.0

      * Description:

      * /pre

      * Create on :Date :2005-6-13 Time:15:57:16

      * LastModified:

      * History:

      */

      public class GreedSnake {

      public static void main(String[] args) {

      SnakeModel model = new SnakeModel(20,30);

      SnakeControl control = new SnakeControl(model);

      SnakeView view = new SnakeView(model,control);

      //添加一个观察者,让view成为model的观察者

      model.addObserver(view);

      (new Thread(model)).start();

      }

      }

      -------------------------------------------------------------

      2、

      package mvcTest;

      //SnakeControl.java

      import java.awt.event.KeyEvent;

      import java.awt.event.KeyListener;

      /**

      * MVC中的Controler,负责接收用户的操作,并把用户操作通知Model

      */

      public class SnakeControl implements KeyListener{

      SnakeModel model;

      public SnakeControl(SnakeModel model){

      this.model = model;

      }

      public void keyPressed(KeyEvent e) {

      int keyCode = e.getKeyCode();

      if (model.running){ // 运行状态下,处理的按键

      switch (keyCode) {

      case KeyEvent.VK_UP:

      model.changeDirection(SnakeModel.UP);

      break;

      case KeyEvent.VK_DOWN:

      model.changeDirection(SnakeModel.DOWN);

      break;

      case KeyEvent.VK_LEFT:

      model.changeDirection(SnakeModel.LEFT);

      break;

      case KeyEvent.VK_RIGHT:

      model.changeDirection(SnakeModel.RIGHT);

      break;

      case KeyEvent.VK_ADD:

      case KeyEvent.VK_PAGE_UP:

      model.speedUp();

      break;

      case KeyEvent.VK_SUBTRACT:

      case KeyEvent.VK_PAGE_DOWN:

      model.speedDown();

      break;

      case KeyEvent.VK_SPACE:

      case KeyEvent.VK_P:

      model.changePauseState();

      break;

      default:

      }

      }

      // 任何情况下处理的按键,按键导致重新启动游戏

      if (keyCode == KeyEvent.VK_R ||

      keyCode == KeyEvent.VK_S ||

      keyCode == KeyEvent.VK_ENTER) {

      model.reset();

      }

      }

      public void keyReleased(KeyEvent e) {

      }

      public void keyTyped(KeyEvent e) {

      }

      }

      -------------------------------------------------------------

      3、

      /*

      *

      */

      package mvcTest;

      /**

      * 游戏的Model类,负责所有游戏相关数据及运行

      * @author WangYu

      * @version 1.0

      * Description:

      * /pre

      * Create on :Date :2005-6-13 Time:15:58:33

      * LastModified:

      * History:

      */

      //SnakeModel.java

      import javax.swing.*;

      import java.util.Arrays;

      import java.util.LinkedList;

      import java.util.Observable;

      import java.util.Random;

      /**

      * 游戏的Model类,负责所有游戏相关数据及运行

      */

      class SnakeModel extends Observable implements Runnable {

      boolean[][] matrix; // 指示位置上有没蛇体或食物

      LinkedList nodeArray = new LinkedList(); // 蛇体

      Node food;

      int maxX;

      int maxY;

      int direction = 2; // 蛇运行的方向

      boolean running = false; // 运行状态

      int timeInterval = 200; // 时间间隔,毫秒

      double speedChangeRate = 0.75; // 每次得速度变化率

      boolean paused = false; // 暂停标志

      int score = 0; // 得分

      int countMove = 0; // 吃到食物前移动的次数

      // UP and DOWN should be even

      // RIGHT and LEFT should be odd

      public static final int UP = 2;

      public static final int DOWN = 4;

      public static final int LEFT = 1;

      public static final int RIGHT = 3;

      public SnakeModel( int maxX, int maxY) {

      this.maxX = maxX;

      this.maxY = maxY;

      reset();

      }

      public void reset(){

      direction = SnakeModel.UP; // 蛇运行的方向

      timeInterval = 200; // 时间间隔,毫秒

      paused = false; // 暂停标志

      score = 0; // 得分

      countMove = 0; // 吃到食物前移动的次数

      // initial matirx, 全部清0

      matrix = new boolean[maxX][];

      for (int i = 0; i maxX; ++i) {

      matrix[i] = new boolean[maxY];

      Arrays.fill(matrix[i], false);

      }

      // initial the snake

      // 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半

      int initArrayLength = maxX 20 ? 10 : maxX / 2;

      nodeArray.clear();

      for (int i = 0; i initArrayLength; ++i) {

      int x = maxX / 2 + i;//maxX被初始化为20

      int y = maxY / 2; //maxY被初始化为30

      //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]

      //默认的运行方向向上,所以游戏一开始nodeArray就变为:

      // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]

      nodeArray.addLast(new Node(x, y));

      matrix[x][y] = true;

      }

      // 创建食物

      food = createFood();

      matrix[food.x][food.y] = true;

      }

      public void changeDirection(int newDirection) {

      // 改变的方向不能与原来方向同向或反向

      if (direction % 2 != newDirection % 2) {

      direction = newDirection;

      }

      }

      /**

      * 运行一次

      * @return

      */

      public boolean moveOn() {

      Node n = (Node) nodeArray.getFirst();

      int x = n.x;

      int y = n.y;

      // 根据方向增减坐标值

      switch (direction) {

      case UP:

      y--;

      break;

      case DOWN:

      y++;

      break;

      case LEFT:

      x--;

      break;

      case RIGHT:

      x++;

      break;

      }

      // 如果新坐标落在有效范围内,则进行处理

      if ((0 = x x maxX) (0 = y y maxY)) {

      if (matrix[x][y]) { // 如果新坐标的点上有东西(蛇体或者食物)

      if (x == food.x y == food.y) { // 吃到食物,成功

      nodeArray.addFirst(food); // 从蛇头赠长

      // 分数规则,与移动改变方向的次数和速度两个元素有关

      int scoreGet = (10000 - 200 * countMove) / timeInterval;

      score += scoreGet 0 ? scoreGet : 10;

      countMove = 0;

      food = createFood(); // 创建新的食物

      matrix[food.x][food.y] = true; // 设置食物所在位置

      return true;

      } else // 吃到蛇体自身,失败

      return false;

      } else { // 如果新坐标的点上没有东西(蛇体),移动蛇体

      nodeArray.addFirst(new Node(x, y));

      matrix[x][y] = true;

      n = (Node) nodeArray.removeLast();

      matrix[n.x][n.y] = false;

      countMove++;

      return true;

      }

      }

      return false; // 触到边线,失败

      }

      public void run() {

      running = true;

      while (running) {

      try {

      Thread.sleep(timeInterval);

      } catch (Exception e) {

      break;

      }

      if (!paused) {

      if (moveOn()) {

      setChanged(); // Model通知View数据已经更新

      notifyObservers();

      } else {

      JOptionPane.showMessageDialog(null,

      "you failed",

      "Game Over",

      JOptionPane.INFORMATION_MESSAGE);

      break;

      }

      }

      }

      running = false;

      }

      private Node createFood() {

      int x = 0;

      int y = 0;

      // 随机获取一个有效区域内的与蛇体和食物不重叠的位置

      do {

      Random r = new Random();

      x = r.nextInt(maxX);

      y = r.nextInt(maxY);

      } while (matrix[x][y]);

      return new Node(x, y);

      }

      public void speedUp() {

      timeInterval *= speedChangeRate;

      }

      public void speedDown() {

      timeInterval /= speedChangeRate;

      }

      public void changePauseState() {

      paused = !paused;

      }

      public String toString() {

      String result = "";

      for (int i = 0; i nodeArray.size(); ++i) {

      Node n = (Node) nodeArray.get(i);

      result += "[" + n.x + "," + n.y + "]";

      }

      return result;

      }

      }

      class Node {

      int x;

      int y;

      Node(int x, int y) {

      this.x = x;

      this.y = y;

      }

      }

      ------------------------------------------------------------

      4、

      package mvcTest;

      //SnakeView.java

      import javax.swing.*;

      import java.awt.*;

      import java.util.Iterator;

      import java.util.LinkedList;

      import java.util.Observable;

      import java.util.Observer;

      /**

      * MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑

      */

      public class SnakeView implements Observer {

      SnakeControl control = null;

      SnakeModel model = null;

      JFrame mainFrame;

      Canvas paintCanvas;

      JLabel labelScore;

      public static final int canvasWidth = 200;

      public static final int canvasHeight = 300;

      public static final int nodeWidth = 10;

      public static final int nodeHeight = 10;

      public SnakeView(SnakeModel model, SnakeControl control) {

      this.model = model;

      this.control = control;

      mainFrame = new JFrame("GreedSnake");

      Container cp = mainFrame.getContentPane();

      // 创建顶部的分数显示

      labelScore = new JLabel("Score:");

      cp.add(labelScore, BorderLayout.NORTH);

      // 创建中间的游戏显示区域

      paintCanvas = new Canvas();

      paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);

      paintCanvas.addKeyListener(control);

      cp.add(paintCanvas, BorderLayout.CENTER);

      // 创建底下的帮助栏

      JPanel panelButtom = new JPanel();

      panelButtom.setLayout(new BorderLayout());

      JLabel labelHelp;

      labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);

      panelButtom.add(labelHelp, BorderLayout.NORTH);

      labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);

      panelButtom.add(labelHelp, BorderLayout.CENTER);

      labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);

      panelButtom.add(labelHelp, BorderLayout.SOUTH);

      cp.add(panelButtom, BorderLayout.SOUTH);

      mainFrame.addKeyListener(control);

      mainFrame.pack();

      mainFrame.setResizable(false);

      mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      mainFrame.setVisible(true);

      }

      void repaint() {

      Graphics g = paintCanvas.getGraphics();

      //draw background

      g.setColor(Color.WHITE);

      g.fillRect(0, 0, canvasWidth, canvasHeight);

      // draw the snake

      g.setColor(Color.BLACK);

      LinkedList na = model.nodeArray;

      Iterator it = na.iterator();

      while (it.hasNext()) {

      Node n = (Node) it.next();

      drawNode(g, n);

      }

      // draw the food

      g.setColor(Color.RED);

      Node n = model.food;

      drawNode(g, n);

      updateScore();

      }

      private void drawNode(Graphics g, Node n) {

      g.fillRect(n.x * nodeWidth,

      n.y * nodeHeight,

      nodeWidth - 1,

      nodeHeight - 1);

      }

      public void updateScore() {

      String s = "Score: " + model.score;

      labelScore.setText(s);

      }

      public void update(Observable o, Object arg) {

      repaint();

      }

      }

      希望采纳

      谁能给个JAVA的小程序代码,越小越好!

      这是我晓得的最简单的java小程序代码了你可以看看:

      package com.kenki.emp;

      import javax.servlet.*;

      import javax.servlet.http.*;

      import java.io.*;

      import java.util.*;

      import java.sql.SQLException;

      import java.sql.*;

      public class emp extends HttpServlet {

      private static final String CONTENT_TYPE = "text/html; charset=GBK";

      //Initialize global variables

      public void init() throws ServletException {

      }

      //Process the HTTP Get request

      public void doGet(HttpServletRequest request, HttpServletResponse response) throws

      ServletException, IOException {

      response.setContentType(CONTENT_TYPE);

      PrintWriter out = response.getWriter();

      String code = request.getParameter("code");

      String name = request.getParameter("name");

      String pay = request.getParameter("pay");

      System.out.println("empcode:" + code);

      System.out.println("name:" + name);

      System.out.println("pay:" + pay);

      //创建驱动

      new com.microsoft.jdbc.sqlserver.SQLServerDriver();

      String strd =

      "jdbc:microsoft:sqlserver://localhost:1433;databasename=emp_dates";

      String username = "sa";

      String pws = "";

      try {

      java.sql.Connection conn = java.sql.DriverManager.getConnection(

      strd, username, pws);

      String strs = "insert into emp values(?,?,?)";

      java.sql.PreparedStatement pre = conn.prepareStatement(strs);

      pre.setString(1, code);

      pre.setString(2, name);

      pre.setString(3, pay);

      pre.execute();

      pre.close();

      conn.close();

      //重定向至查询页面

      out.println("成功保存!!");

      response.sendRedirect("emp.html");

      } catch (SQLException ss) {

      ss.printStackTrace();

      response.sendRedirect("/WebModule1/error.html");

      }

      }

      //Process the HTTP Post request

      public void doPost(HttpServletRequest request, HttpServletResponse response) throws

      ServletException, IOException {

      doGet(request, response);

      }

      //Clean up resources

      public void destroy() {

      }

      }

      求Java 日历的小程序的源代码

      也不知道你具体需求是什么,以前改过一个日历程序,一共四个java类,放在同一个包里。经测试可以运行。

      //Start.java

      import java.awt.*;

      import javax.swing.*;

      class Start{

      public static void main(String [] args){

      DateFrame frame=new DateFrame();

      frame.setLocationRelativeTo(frame);

      frame.setResizable(false);

      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      frame.setVisible(true);

      }

      }

      //DateInfo.java

      import java.util.*;

      public class DateInfo{

      private int mYear, mMonth;

      private int mDayOfMonth, mFristWeek;

      public DateInfo(int year, int month) throws DateException{

      mYear = year;

      if (month 0 || month 12){

      throw (new DateException());

      }

      mMonth = month;

      mDayOfMonth = getDayOfMonth(mYear, mMonth);

      mFristWeek = getFristWeek(mYear, mMonth);

      }

      private int getDayOfMonth(int year, int month){

      int[][] ary = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},

      {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};

      return (ary[isLeapYear(year)][month]);

      }

      private int isLeapYear(int year){

      if (year % 4 == 0 year % 100 != 0 ||year % 400 == 0){

      return (1);

      }

      else{

      return (0);

      }

      }

      private int getFristWeek(int year, int month){

      java.util.Calendar cal = Calendar.getInstance();

      cal.set(year, month - 1, 1);

      return (cal.get(Calendar.DAY_OF_WEEK) - 1);

      }

      public String toString(){

      String str;

      str = "\t\t" + mYear + "年" + mMonth + "月\n";

      str += "日\t一\t二\t三\t四\t五\t六\n";

      int i;

      for (i = 1; i = mFristWeek; i++){

      str += " \t";

      }

      for (int j = 1; j = mDayOfMonth; j++, i++){

      str +=j+"\t" ;

      if (i % 7 == 0){

      str += "\n";

      }

      }

      return (str);

      }

      }

      //DateFrame.java

      import java.awt.*;

      import java.awt.event.*;

      import javax.swing.*;

      import java.util.Calendar;

      class DateFrame extends JFrame implements Runnable{

      Calendar date=Calendar.getInstance();

      String[] str={"1","2","3","4","5","6","7","8","9","10","11","12"};

      JLabel lblYear=new JLabel("年 ");

      JLabel lblMonth=new JLabel("月 ");

      JLabel lblDate=new JLabel("现在的时间是:");

      JLabel lblShowDate=new JLabel();

      // javax.swing.JTextField trxt =new JTextField(10);

      // trxt.setHorizontalAlignment(JTextField.RIGHT); //设置文本从右边输入

      JComboBox cboMonth=new JComboBox(str);

      JComboBox cboYear=new JComboBox();

      JTextArea txaShow=new JTextArea();

      JPanel pnlNorth=new JPanel();

      JPanel pnlSOUTH=new JPanel();

      JButton btnShow=new JButton("显示");

      JButton btnClose=new JButton("关闭");

      JScrollPane jsp=new JScrollPane(txaShow);

      Container c=this.getContentPane();

      public DateFrame(){

      Thread thread=new Thread(this);

      thread.start();

      this.setTitle("玩玩日历拉!!!");

      this.setSize(300,260);

      for (int i = 1990; i=2025; i++) {

      cboYear.addItem(""+i);

      }

      cboYear.setSelectedItem(""+(date.get(Calendar.YEAR)));

      cboMonth.setSelectedItem(""+(date.get(Calendar.MONTH)+1));

      pnlNorth.add(cboYear);

      txaShow.setTabSize(4); //设置tab键的距离

      txaShow.setForeground(Color.GREEN);

      pnlNorth.add(lblYear);

      pnlNorth.add(cboMonth);

      pnlNorth.add(lblMonth);

      pnlNorth.add(lblDate);

      pnlNorth.add(lblShowDate);

      c.add(pnlNorth,BorderLayout.NORTH);

      c.add(jsp);

      pnlSOUTH.add(btnShow);

      pnlSOUTH.add(btnClose);

      c.add(pnlSOUTH,BorderLayout.SOUTH);

      btnShow.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent e){

      int year=Integer.parseInt((String)cboYear.getSelectedItem());

      int month=Integer.parseInt((String)cboMonth.getSelectedItem());

      try {

      DateInfo date=new DateInfo(year,month);

      txaShow.setText(""+date);

      }

      catch (DateException ex) {

      ex.printStackTrace();

      }

      }

      });

      btnClose.addActionListener(new ActionListener(){

      public void actionPerformed(ActionEvent e){

      System.exit(0);

      }

      });

      }

      public void run(){

      try {

      while(true){

      Thread.sleep(1000);

      int hour=date.get(Calendar.HOUR);

      int minute=date.get(Calendar.MINUTE);

      int second=date.get(Calendar.SECOND);

      String str=hour+":"+minute+":"+second;

      lblShowDate.setText(str);

      //this.repaint();

      }

      }

      catch (Exception ex) {

      ex.printStackTrace();

      }

      }

      }

      //DateException.java

      public class DateException extends Exception{

      public DateException(){

      super("日期数据不合法.");

      }

      }

        <bdo id='lhq6fxr4'></bdo><ul id='nkthrdbb'></ul>

      • <i id='6mkt1s6s'><tr id='x8olk7et'><dt id='vhtvnqnb'><q id='pzcoqt6z'><span id='f25l6kvq'><b id='ulc5tvlo'><form id='b1a5hhha'><ins id='gscrfvhz'></ins><ul id='kxe23v5i'></ul><sub id='bwcxxrsj'></sub></form><legend id='3tf24oe4'></legend><bdo id='5w84z1et'><pre id='i9yx6ni4'><center id='nlbic0i8'></center></pre></bdo></b><th id='ysof6ccv'></th></span></q></dt></tr></i><div id='ufok77jf'><tfoot id='n4nqvk6p'></tfoot><dl id='7allagvu'><fieldset id='j0ck7nzh'></fieldset></dl></div>
      • <tfoot id='na97pwqb'></tfoot>
        • <small id='ura4r3lk'></small><noframes id='tve2ox79'>

                <tbody id='3e1j9au6'></tbody>
            • <legend id='uijyymu0'><style id='bcmp4p6t'><dir id='u6920ybc'><q id='2v5a3hl5'></q></dir></style></legend>

                上一篇:java代码自动优化 java优化代码常见套路

                栏    目:Java编程

                下一篇:没有了

                本文标题:java源代码大全小程序 java代码源码

                本文地址:https://www.xiuzhanwang.com/a1/Javabiancheng/17371.html

                网页制作CMS教程网络编程软件编程脚本语言数据库服务器

                如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

                联系QQ:835971066 | 邮箱:835971066#qq.com(#换成@)

                Copyright © 2002-2020 脚本教程网 版权所有

                <tfoot id='f481g7vg'></tfoot>
                    <bdo id='aeqltvwd'></bdo><ul id='xmapiezk'></ul>
                1. <legend id='uzsfi3lw'><style id='38rikty8'><dir id='63sy327v'><q id='jksrsnap'></q></dir></style></legend>

                  1. <i id='14ebgiz9'><tr id='v5kmmc5c'><dt id='o7gia0qd'><q id='awdgov2e'><span id='xuy0drg4'><b id='y73cgbn6'><form id='50w94w8b'><ins id='mhtcd3yh'></ins><ul id='vsoz3zyl'></ul><sub id='3fjhoort'></sub></form><legend id='za95qbdi'></legend><bdo id='wicsceq9'><pre id='s8z859do'><center id='8jt5w5mq'></center></pre></bdo></b><th id='y2h4ujji'></th></span></q></dt></tr></i><div id='xwa137gm'><tfoot id='pa0w1bsv'></tfoot><dl id='woezrtgk'><fieldset id='6m5i4iqj'></fieldset></dl></div>
                  2. <small id='fndasr94'></small><noframes id='hdqpyqs7'>