短代码的java小游戏,求“贪吃蛇“小游戏JAVA源代码一份

本文目录
- 求“贪吃蛇“小游戏JAVA源代码一份
- 谁帮我做个JAVA小游戏代码
- 如何用java实现一个贪吃蛇小游戏
- 用JAVA编写一个小游戏
- java猜数字小游戏用eclipse写的
- 用JAVA做一个剪刀,石头,布的人机猜拳游戏
- 求一个简单的JAVA五子棋代码!! 网上复制的别来了!
- 求一个简单又有趣的JAVA小游戏代码
- 急需一份俄罗斯方块源代码,Java写的
- 基于Java语言的打地鼠小游戏的源代码
求“贪吃蛇“小游戏JAVA源代码一份
贪吃蛇 import java.awt.*; import java.awt.event.*; public class GreedSnake //主类 { /** * @param args */ public static void main(String args) { // TODO Auto-generated method stub new MyWindow(); } } class MyPanel extends Panel implements KeyListener,Runnable//自定义面板类,继承了键盘和线程接口 { Button snake; //定义蛇按钮 int shu=0; //蛇的节数 int food; //食物数组 boolean result=true; //判定结果是输 还是赢 Thread thread; //定义线程 static int weix,weiy; //食物位置 boolean t=true; //判定游戏是否结束 int fangxiang=0; //蛇移动方向 int x=0,y=0; //蛇头位置 MyPanel() { setLayout(null); snake=new Button; food=new int ; thread=new Thread(this); for(int j=0;j《20;j++) { food=(int)(Math.random()*99);//定义20个随机食物 } weix=(int)(food*0.1)*60; //十位*60为横坐标 weiy=(int)(food%10)*40; //个位*40为纵坐标 for(int i=0;i《20;i++) { snake=new Button(); } add(snake); snake.setBackground(Color.black); snake.addKeyListener(this); //为蛇头添加键盘监视器 snake.setBounds(0,0,10,10); setBackground(Color.cyan); } public void run() //接收线程 { while(t) { if(fangxiang==0)//向右 { try { x+=10; snake.setLocation(x, y);//设置蛇头位置 if(x==weix&&y==weiy) //吃到食物 { shu++; weix=(int)(food*0.1)*60; weiy=(int)(food%10)*40; repaint(); //重绘下一个食物 add(snake); //增加蛇节数和位置 snake.getBounds()); } thread.sleep(100); //睡眠100ms } catch(Exception e){} } else if(fangxiang==1)//向左 { try { x-=10; snake.setLocation(x, y); if(x==weix&&y==weiy) { shu++; weix=(int)(food*0.1)*60; weiy=(int)(food%10)*40; repaint(); add(snake); snake.getBounds()); } thread.sleep(100); } catch(Exception e){} } else if(fangxiang==2)//向上 { try { y-=10; snake.setLocation(x, y); if(x==weix&&y==weiy) { shu++; weix=(int)(food*0.1)*60; weiy=(int)(food%10)*40; repaint(); add(snake); snake.getBounds()); } thread.sleep(100); } catch(Exception e){} } else if(fangxiang==3)//向下 { try { y+=10; snake.setLocation(x, y); if(x==weix&&y==weiy) { shu++; weix=(int)(food*0.1)*60; weiy=(int)(food%10)*40; repaint(); add(snake); snake.getBounds()); } thread.sleep(100); } catch(Exception e){} } int num1=shu; while(num1》1)//判断是否咬自己的尾巴 { if(snake.getBounds().y) { t=false; result=false; repaint(); } num1--; } if(x《0||x》=this.getWidth()||y《0||y》=this.getHeight())//判断是否撞墙 { t=false; result=false; repaint(); } int num=shu; while(num》0) //设置蛇节位置 { snake.getBounds()); num--; } if(shu==15) //如果蛇节数等于15则胜利 { t=false; result=true; repaint(); } } } public void keyPressed(KeyEvent e) //按下键盘方向键 { if(e.getKeyCode()==KeyEvent.VK_RIGHT)//右键 { if(fangxiang!=1)//如果先前方向不为左 fangxiang=0; } else if(e.getKeyCode()==KeyEvent.VK_LEFT) { if(fangxiang!=0) fangxiang=1; } else if(e.getKeyCode()==KeyEvent.VK_UP) { if(fangxiang!=3) fangxiang=2; } else if(e.getKeyCode()==KeyEvent.VK_DOWN) { if(fangxiang!=2) fangxiang=3; } } public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { } public void paint(Graphics g) //在面板上绘图 { int x1=this.getWidth()-1; int y1=this.getHeight()-1; g.setColor(Color.red); g.fillOval(weix, weiy, 10, 10);//食物 g.drawRect(0, 0, x1, y1); //墙 if(t==false&&result==false) g.drawString("GAME OVER!", 250, 200);//输出游戏失败 else if(t==false&&result==true) g.drawString("YOU WIN!", 250, 200);//输出游戏成功 } } class MyWindow extends Frame implements ActionListener//自定义窗口类 { MyPanel my; Button btn; Panel panel; MyWindow() { super("GreedSnake"); my=new MyPanel(); btn=new Button("begin"); panel=new Panel(); btn.addActionListener(this); panel.add(new Label("begin后请按Tab键选定蛇")); panel.add(btn); panel.add(new Label("按上下左右键控制蛇行动")); add(panel,BorderLayout.NORTH); add(my,BorderLayout.CENTER); setBounds(100,100,610,500); setVisible(true); validate(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void actionPerformed(ActionEvent e)//按下begin按钮 { if(e.getSource()==btn) { try { my.thread.start(); //开始线程 my.validate(); } catch(Exception ee){} } } }
谁帮我做个JAVA小游戏代码
第一个类,服务器主线程类。package src;//定义一个包,存放JAVA文件。import java.io.*;//导入JAVA包,输入输出流包import java.net.*;//导入JAVA包,网络应用包public class SocketServer extends Thread {//服务器主线程,负责为每个发出请求连接的客户端分配一个服务线程。 ServerSocket server;//定义一个对象 public SocketServer() { //该类的午餐构造方法,负责初始化服务器,监听6000端口 try {//捕捉异常的块 server = new ServerSocket(6000);//实例化对象 } catch(IOException e) {//捕捉流异常 System.exit(0);//程序退出 } this.start();//启动主线程 } public void run() {//主线程的线程体 try {//捕捉异常的块 while(true) {//这里为TRUE,表示一直监听6000端口可 Socket client = server.accept();//为每个请求建立一个SOCKET Service ss = new Service(client);//为每个SOCKET建立一个服务线程。 这里参考第二个类,SERVICE类 } } catch(IOException e) {//捕捉异常的块System.exit(1);//程序退出 } } public static void main(String args) {//服务器程序入口,MAIN方法 new SocketServer();//这里直接创建一个主线程对象,因为初始化写再无参构造函数里面,所以这里直接就启动主线程了。 }}第二各类:服务器的服务线程类。package src;//定义一个包,存放JAVA类import java.io.*;//同上一个类import java.net.*;//同上一个类public class Service extends Thread {//这是服务于每个请求的服务线程类。 String data;//定义一个字符串 BufferedReader inputs;//输入流 PrintStream outputs;//输出流 Socket client;//定义一个SOCKET public Service(Socket socket) {//定义有参构造方法,通过传入的SOCKET对象来为某一个请求服务。这里就是主线程调用的方法。 client = socket;//将传递过来的参数给刚定义的这个对象. try {//捕捉异常的块 inputs = new BufferedReader(new InputStreamReader(client .getInputStream()));//获取输入流 outputs = new PrintStream(client.getOutputStream());//获取输出流 } catch (IOException e) {} this.start();//启动服务线程。开始对客户服务。 } public void run() {//线程的主要方法体 try { while (true) {//表示一直侦听端口 data = inputs.readLine();//从输入流中读取客户发来的消息,并赋值给DATA int res = (int) (Math.random() * 3);// 1是石头2是剪刀3布 系统随机生成三个数字,分别表示游戏的三个出拳状态 if (data == null)//如果读取到的数据是空值,就不再继续下一步操作。 break; else {//如果读取到的不是空,则进行比较if (res == 0 && "石头".equals(data)) { data = "电脑也是石头,打平了!!"; } else if (res == 0 && "剪刀".equals(data)) { data = "电脑是石头,电脑赢了!!"; } else if (res == 0 && "布".equals(data)) { data = "电脑是石头,恭喜,你赢了!!"; } else if (res == 1 && "石头".equals(data)) { data = "电脑是剪刀,恭喜,你赢了!!"; } else if (res == 1 && "剪刀".equals(data)) { data = "电脑也是剪刀,打平了!!"; } else if (res == 1 && "布".equals(data)) { data = "电脑是剪刀,电脑赢了!!"; } else if (res == 2 && "石头".equals(data)) { data = "电脑是布,电脑赢了!!"; } else if (res == 2 && "剪刀".equals(data)) { data = "电脑是布,恭喜,你赢了!!"; } else if (res == 2 && "布".equals(data)) { data = "电脑也是布,打平了!!"; } else { data = "电脑不认识你出的拳"; } outputs.println(data);//将比较的结果通过输出流发给客户端。 } } } catch (IOException e) {} try { client.close();//关闭服务 } catch (IOException e) { } }}第三个,客户端类。package src;//同上一个类import java.io.*;//同上一个类import java.net.*;//同上一个类public class Client {//客户端类 public static void main(String args) {//客户端程序入口,MAIN方法 String data;//定义字符串 Socket client = null;//定义SOCKET BufferedReader inputs = null;//输入流 BufferedReader key = null;//输入流 PrintStream outputs = null;//输出流 try { client = new Socket("localhost",6000);//客户程序启动通过6000端口和服务器联系,和服务器保持端口一致。 inputs = new BufferedReader(new InputStreamReader(client.getInputStream()));//获取输入流 outputs = new PrintStream(client.getOutputStream());//获取输出流 key = new BufferedReader(new InputStreamReader(System.in));//用于接收用户要发送给客户端的字符串。 } catch(IOException e) { System.out.println("CAN NOT CONN WITH SERVER"); } try { while(true) { System.out.println("----------------------------"); System.out.print("请出拳:石头/剪刀/布 "); data = key.readLine();//读取用户输入的字符串。 outputs.println(data);//将读取的字符串发送给服务器。 System.out.println("ECHO: " + inputs.readLine());//返回服务器的结果并打印到控制台。 } } catch(IOException e) { System.out.println("ERROR IO"); } try { client.close(); } catch(IOException e) { System.out.println("can not close it"); } }}运行的方法是先启动主线程类。然后启动客户端类。并再客户端一方输入 锤子,或 剪刀 或 布 ,然后回车,服务器会根据判断返回游戏的结果。这个过程反复执行。可以多次出拳和服务器较量。呵呵,这次应该够详细了,不明白的可以继续补充。o(∩_∩)o...
如何用java实现一个贪吃蛇小游戏
1、设计游戏,首先就要设计界面。首先看一下我设计的一个界面。界面分为左边的游戏区与右边的控制区。游戏区包含“得分信息”和贪吃蛇的游戏区,右边控制区有“开始”“暂停”“停止”按钮,等级选择单选框以及游戏排行榜。
2、所以我们需要定义swing组件,并在类初始化时初始化这些组件,添加组件。因为后面设计游戏的时候,我们要确切知道游戏区的大小,所以这里设置游戏区固定大小值。本来想用布局来更好的管理,但作者对布局也掌握不够,所以就先设置固定大小吧。
3、定义我们的游戏。贪吃蛇游戏其实就是包含很多细小网格,然后蛇在网格中移动。蛇由一连串的网格组成,为了视觉效果,蛇身用蓝色标记,食物用红色标记,背景白色。如第一张图片所示。所以,我们需要定义二维数组,保存网格信息,保存蛇身和食物的位置信息等。初始化时,还需要添加键盘事件控制上下左右移动。
4、食物的位置信息是二维的,所以我简单定义了一个类用来保存二维信息。
5、接着就是实现游戏的功能了。开始,暂停,停止按钮添加事件控制游戏开始。等级按钮定义游戏难度等。
6、开始游戏后,我们定义一个定时器。蛇身按照指定的方向移动,方向是通过初始化时添加的键盘事件,键盘的上下左右按钮来控制。蛇身是连续的位置信息,保存到队列中,所以蛇身的移动就是队首增加一个位置,队尾减少位置,然后重新绘画游戏区就可以了。
用JAVA编写一个小游戏
前天写的猜数字游戏,yong i控制猜测次数,有详细解析,用黑窗口可以直接运行,
我试验过了,没问题
import javax.swing.Icon;import javax.swing.JOptionPane;public class CaiShuZi4JOptionPane { /** * @param args */ public static void main(String args) { Icon icon = null; boolean bl = false; int put = 0; int c = (int) (((Math.random())*100)+1); //获取一个1-100的随机数 System.out.println("你获取的随机数是:"+c); //打印你的随机数字 String str1 = (String) JOptionPane.showInputDialog(null,"请输入你的猜测数字(1-100):\n","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入"); //第一次输入你的猜测数字 if(str1==null){ JOptionPane.showMessageDialog(null, "你已经取消了本次游戏"); //如果你点取消那么本次游戏结束 }else{ bl = num(str1); //判断是输入的是不是数字或者是整数 if(true==bl){ //如果是数字的话进入与随机数比较的程序 System.out.println("你输入的数字是:"+str1); //打印你输入的数字 put = Integer.valueOf(str1); for(int i = 4;i 》 0;i--){ //i是你可以猜测的次数 if(put==c){ JOptionPane.showMessageDialog(null, "恭喜你猜对了,正确答案是:"+c+"。"); //如果你猜对了就直接结束循环 break; }else if(put》c){ //如果输大了就让你再次从新输入 str1 = (String) JOptionPane.showInputDialog(null,"你的输入过大。你还有"+i+"次机会,请重新输入:\n","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入"); if(str1==null){ JOptionPane.showMessageDialog(null, "你已经取消了本次输入"); break; }else{ bl =num(str1); if(true==bl){ put = Integer.valueOf(str1); }else{ JOptionPane.showMessageDialog(null, "你的输入不正确,请重新输入"); } } }else if(put《c){ //如果你输小了也让你从新输入 str1 = (String) JOptionPane.showInputDialog(null,"你的输入过小。你还有"+i+"次机会,请重新输入:\n","猜数字游戏",JOptionPane.PLAIN_MESSAGE,icon,null,"在这输入"); if(str1==null){ JOptionPane.showMessageDialog(null, "你已经取消了本次输入"); break; }else{ bl =num(str1); if(true==bl){ put = Integer.valueOf(str1); }else{ JOptionPane.showMessageDialog(null, "你的输入不正确,请重新输入"); } } } } }else if(bl==false){ //这个 是你第一次如果填写的不是数字的话也会结束本次游戏 JOptionPane.showMessageDialog(null, "请您下次按要求填写。本次游戏结束"); } if(true==bl && c!=put){ //如果你i次都没猜对,那么就直接告诉你这个数十什么 JOptionPane.showMessageDialog(null, "很遗憾你没能猜对,这个数字是:"+c+"."); } } } public static boolean num(String value){ //一个静态方法,判断你输入的是不是数字 try { Integer.parseInt(value); return true; } catch (Exception e) { return false; } }}
java猜数字小游戏用eclipse写的
import java.util.Scanner;/*** Java命令行版 猜数字游戏* @author kaifang*/public class GuessNum {public static void main(String args) {System.out.println("======猜数字游戏======\n");int answer = (int)(Math.random() * 200 + 1);Scanner sr = new Scanner(System.in);while(true) {System.out.print("请输入你猜的数字(1-200):");int in = sr.nextInt();if (in 》 answer) {System.out.println("猜大了!\n");} else if(in 《 answer){System.out.println("猜小了!\n");} else {System.out.println("恭喜你,才猜对了!!!\n");break;}}sr.close();}}
用JAVA做一个剪刀,石头,布的人机猜拳游戏
编写这个小游戏 我们需要几个类
1、第一个 Person 类
import java.util.Scanner;
/**
* @copyright 2018 sugarsLab.com All rights reserved.
* @author jingfei.wu
* @date 2018年11月16日
* @version 1.0
* @ClassName Person
* @description 用户类 用来计算用户输入
*/
public class Person {
public static final Person me = new Person();
private int n = 0;
/**
* @copyright 2018 sugarsLab.com All rights reserved.
* @author jingfei.wu
* @date 2018年11月16日
* @version 1.0
* @description 用户输入的 指令
* @return
*/
public int input() {
System.out.println("请输入:石头,剪刀,布\n输入:@退出 退出系统");
@SuppressWarnings("resource")
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
//s 里面存着 用户输入的 指令 切记这里不要使用 s.equals() 而是写 "指令".equals() 这么写 是为了避免空指针
if ("石头".equals(s)) {
n = 1;
} else if ("剪刀".equals(s)) {
n = 2;
} else if ("布".equals(s)) {
n = 3;
} else if ("@退出".equals(s)) {
System.out.print("系统退出了");
System.exit(0);
}
return n;
}
}
2、Computer 类
/**
* @copyright 2018 sugarsLab.com All rights reserved.
* @author jingfei.wu
* @date 2018年11月16日
* @version 1.0
* @ClassName Computer
* @description 游戏中电脑类 用来产生随机数
*/
public class Computer {
public static final Computer me = new Computer();
/**
* @copyright 2018 sugarsLab.com All rights reserved.
* @author jingfei.wu
* @date 2018年11月16日
* @version 1.0
* @description TODO
* @return {int} 返回值为int 类型
*/
public int random() {return (int) (Math.random() * 3 + 1);}
}
3、Game类
/**
* @author jingfei.wu
* @date 2018年11月16日
* @version 1.0
* @ClassName Game
* @description 游戏类 用来计算游戏结果
*/
public class Game {
/**
* @author jingfei.wu
* @date 2018年11月16日
* @version 1.0
* @description 返回 人机交互结果
* @param n
* {int} 用户输入 的标识 石头 为 1 剪刀 为 2 布 为 3
* @param m
* {int} 电脑产生的随机数 石头 为 1 剪刀 为 2 布 为 3
*/
public void result(int n, Integer m) {
String res = "";
if (m.intValue() == 1)
res = "石头";
else if (m.intValue() == 2)
res = "剪刀";
else
res = "布";
if (n == m) {
System.out.println("平了 computer出" + res);
} else {
if (m == 1) {
if (n == 2)
System.out.println("你输了 computer出 " + res);
else if (n == 3)
System.out.println("你赢了 computer出 " + res);
} else if (m == 2) {
if (n == 1)
System.out.println("你赢了 computer出 " + res);
else if (n == 3)
System.out.println("你输了 computer出 " + res);
} else if (m == 3) {
if (n == 1)
System.out.println("你输了 computer出 " + res);
else if (n == 2)
System.out.println("你赢了 computer出 " + res);
}
}
}
public static void main(String args) {
while (true) {
Game gamer = new Game();
gamer.result(Person.me.input(), Computer.me.random());
}
}
}
如下是程序运行截图
求一个简单的JAVA五子棋代码!! 网上复制的别来了!
以下是现写的 实现了两人对战 自己复制后运行把 没什么难度 类名 Games import java.util.Scanner; public class Games { private String board; private static int SIZE = 17; private static String roles = "A玩家"; //初始化数组 public void initBoard() { board = new String; for (int i = 0; i 《 SIZE; i++) { for (int j = 0; j 《 SIZE; j++) { // if(i==0){ // String str = ""; // str += j+" "; // board= str; // }else if(i!=0&&j==0){ // String str = ""; // str += i+" "; // board= str; // }else{ board = "╋"; // } } } } //输出棋盘 public void printBoard() { for (int i = 0; i 《 SIZE; i++) { for (int j = 0; j 《 SIZE; j++) { System.out.print(board); } System.out.println(); } } //判断所下棋子位置是否合理 public boolean isOk(int x, int y) { boolean isRight = true; if (x 》= 16 || x 《 1 || y 》= 16 | y 《 1) { //System.out.println("输入错误,请从新输入"); isRight = false; } if (board.equals("○")) { isRight = false; } return isRight; } //判断谁赢了 public void whoWin(Games wz) { // 从数组挨个查找找到某个类型的棋子就从该棋子位置向右,向下,斜向右下 各查找5连续的位置看是否为5个相同的 int xlabel;// 记录第一次找到某个棋子的x坐标 int ylabel;// 记录第一次找到某个棋子的y坐标 // ●○╋ // 判断人是否赢了 for (int i = 0; i 《 SIZE; i++) { for (int j = 0; j 《 SIZE; j++) { if (board.equals("○")) { xlabel = i; ylabel = j; // 横向找 x坐标不变 y坐标以此加1连成字符串 String heng = ""; if (i + 5 《 SIZE && j + 5 《 SIZE) { for (int k = j; k 《 j + 5; k++) { heng += board; } if (heng.equals("○○○○○")) { System.out.println(roles+"赢了!您输了!"); System.exit(0); } // 向下判断y不变 x逐增5 连成字符串 String xia = ""; for (int l = j; l 《 i + 5; l++) { xia += board; // System.out.println(xia); } if (xia.equals("○○○○○")) { System.out.println(roles+"赢了!您输了!"); System.exit(0); } // 斜向右下判断 String youxia = ""; for (int a = 1; a 《= 5; a++) { youxia += board; } if (youxia.equals("○○○○○")) { System.out.println(roles+"赢了!您输了!"); System.exit(0); } } } } } // 判断电脑是否赢了 for (int i = 0; i 《 SIZE; i++) { for (int j = 0; j 《 SIZE; j++) { if (board.equals("●")) { xlabel = i; ylabel = j; // 横向找 x坐标不变 y坐标以此加1连成字符串 String heng = ""; if (j + 5 《 SIZE && i + 5 《 SIZE) { for (int k = j; k 《 j + 5; k++) { heng += board; } if (heng.equals("●●●●●")) { System.out.println(roles+"赢输了!您输了!"); System.exit(0); } // 向下判断y不变 x逐增5 连成字符串 String xia = ""; for (int l = i; l 《 i + 5; l++) { xia += board; // System.out.println(xia); } if (xia.equals("●●●●●")) { System.out.println(roles+"赢了!您输了!"); System.exit(0); } // 斜向右下判断 String youxia = ""; for (int a = 1; a 《= 5; a++) { youxia += board; } if (youxia.equals("●●●●●")) { System.out.println(roles+"赢了!您输了!"); System.exit(0); } } } } } } public static void main(String args) { Games wz = new Games(); Scanner sc = new Scanner(System.in); wz.initBoard(); wz.printBoard(); while (true) { System.out.print("请"+roles+"输入X,Y坐标,必须在0-15范围内,xy以空格隔开,输入16 16结束程序"); int x = sc.nextInt(); int y = sc.nextInt(); if (x == SIZE && y == SIZE) { System.out.println("程序结束"); System.exit(0); } if (x 》 SIZE || x 《 0 || y 》 SIZE | y 《 0) { System.out.println("输入错误,请从新输入"); continue; } //如果roles是A玩家 就让A玩家下棋,否则就让B玩家下棋。 if (wz.board.equals("╋")&&roles.equals("A玩家")) { wz.board = "○"; wz.printBoard(); //判断输赢 wz.whoWin(wz); }else if(wz.board.equals("╋")&&roles.equals("B玩家")){ wz.board = "●"; wz.printBoard(); //判断输赢 wz.whoWin(wz); } else { System.out.println("此处已经有棋子,从新输入"); continue; } if(roles.equals("A玩家")){ roles = "B玩家"; }else if(roles.equals("B玩家")){ roles = "A玩家"; } } } }
求一个简单又有趣的JAVA小游戏代码
具体如下:
连连看的小源码
package Lianliankan;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame; //主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton;//游戏按钮数组
JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮
JLabel fractionLable=new JLabel("0"); //分数标签
JButton firstButton,secondButton; //
分别记录两次62616964757a686964616fe59b9ee7ad9431333335326239被选中的按钮
int grid;//储存游戏按钮位置
static boolean pressInformation=false; //判断是否有按钮被选中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标
int i,j,k,n;//消除方法控制
代码(code)是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。
对于字符和Unicode数据的位模式的定义,此模式代表特定字母、数字或符号(例如 0x20 代表一个空格,而 0x74 代表字符“t”)。一些数据类型每个字符使用一个字节;每个字节可以具有 256 个不同的位模式中的一个模式。
在计算机中,字符由不同的位模式(ON 或 OFF)表示。每个字节有 8 位,这 8 位可以有 256 种不同的 ON 和 OFF 组合模式。对于使用 1 个字节存储每个字符的程序,通过给每个位模式指派字符可表示最多 256 个不同的字符。2 个字节有 16 位,这 16 位可以有 65,536 种唯一的 ON 和 OFF 组合模式。使用 2 个字节表示每个字符的程序可表示最多 65,536 个字符。
单字节代码页是字符定义,这些字符映射到每个字节可能有的 256 种位模式中的每一种。代码页定义大小写字符、数字、符号以及 !、@、#、% 等特殊字符的位模式。每种欧洲语言(如德语和西班牙语)都有各自的单字节代码页。
虽然用于表示 A 到 Z 拉丁字母表字符的位模式在所有的代码页中都相同,但用于表示重音字符(如"é"和"á")的位模式在不同的代码页中却不同。如果在运行不同代码页的计算机间交换数据,必须将所有字符数据由发送计算机的代码页转换为接收计算机的代码页。如果源数据中的扩展字符在接收计算机的代码页中未定义,那么数据将丢失。
如果某个数据库为来自许多不同国家的客户端提供服务,则很难为该数据库选择这样一种代码页,使其包括所有客户端计算机所需的全部扩展字符。而且,在代码页间不停地转换需要花费大量的处理时间。
急需一份俄罗斯方块源代码,Java写的
使用Java实现小游戏:俄罗斯方块使用一个二维数组保存游戏的地图:// 游戏地图格子,每个格子保存一个方块,数组纪录方块的状态private State map;123游戏前先将所有地图中的格子初始化为空:/* 初始化所有的方块为空 */for (int i = 0; i 《 map.length; i++) { for (int j = 0; j 《 map.length; j++) { map = State.EMPTY; }}1234567玩游戏过程中,我们能够看到界面上的方块,那么就得将地图中所有的方块绘制出来,当然,除了需要绘制方块外,游戏积分和游戏结束的字符串在必要的时候也需要绘制:/** * 绘制窗体内容,包括游戏方块,游戏积分或结束字符串 */@Overridepublic void paint(Graphics g) { super.paint(g); for (int i = 0; i 《 rows; i++) { for (int j = 0; j 《 columns; j++) { if (map == State.ACTIVE) { // 绘制活动块 g.setColor(activeColor); g.fillRoundRect(j * BLOCK_SIZE, i * BLOCK_SIZE + 25, BLOCK_SIZE - 1, BLOCK_SIZE - 1, BLOCK_SIZE / 5, BLOCK_SIZE / 5); } else if (map == State.STOPED) { // 绘制静止块 g.setColor(stopedColor); g.fillRoundRect(j * BLOCK_SIZE, i * BLOCK_SIZE + 25, BLOCK_SIZE - 1, BLOCK_SIZE - 1, BLOCK_SIZE / 5, BLOCK_SIZE / 5); } } } /* 打印得分 */ g.setColor(scoreColor); g.setFont(new Font("Times New Roman", Font.BOLD, 30)); g.drawString("SCORE : " + totalScore, 5, 70); // 游戏结束,打印结束字符串 if (!isGoingOn) { g.setColor(Color.RED); g.setFont(new Font("Times New Roman", Font.BOLD, 40)); g.drawString("GAME OVER !", this.getWidth() / 2 - 140, this.getHeight() / 2); }}123456789101112131415161718192021222324252627282930313233343536通过随机数的方式产生方块所组成的几种图形,一般七种图形:条形、田形、正7形、反7形、T形、Z形和反Z形,如生成条形:map = map = State.ACTIVE;123生成图形后,实现下落的操作。如果遇到阻碍,则不能再继续下落:isFall = true; // 是否能够下落// 从当前行检查,如果遇到阻碍,则停止下落for (int i = 0; i 《 blockRows; i++) { for (int j = 0; j 《 columns; j++) { // 遍历到行中块为活动块,而下一行块为静止块,则遇到阻碍 if (map == State.ACTIVE && map == State.STOPED) { isFall = false; // 停止下落 break; } } if (!isFall) break;}123456789101112131415如果未遇到阻碍,则下落的时候,方块图形整体向下移动一行:// 图形下落一行for (int i = 0; i 《 blockRows; i++) { for (int j = 0; j 《 columns; j++) { if (map == State.ACTIVE) { // 活动块向下移动一行 map = State.EMPTY; // 原活动块变成空块 map = State.ACTIVE; // 下一行块变成活动块 } }}12345678910向左、向右方向移动时是类似的操作:/** * 向左走 */private void left() { // 标记左边是否有阻碍 boolean hasBlock = false; /* 判断是否左边有阻碍 */ for (int i = 0; i 《 blockRows; i++) { if (map == State.ACTIVE) { // 判断左边是否为墙 hasBlock = true; break; // 有阻碍,不用再循环判断行 } else { for (int j = 1; j 《 columns; j++) { // 判断左边是否有其它块 if (map == State.ACTIVE && map == State.STOPED) { hasBlock = true; break; // 有阻碍,不用再循环判断列 } } if (hasBlock) break; // 有阻碍,不用再循环判断行 } } /* 左边没有阻碍,则将图形向左移动一个块的距离 */ if (!hasBlock) { for (int i = 0; i 《 blockRows; i++) { for (int j = 1; j 《 columns; j++) { if (map == State.ACTIVE) { map = State.EMPTY; map = State.ACTIVE; } } } // 重绘 repaint(); }}1234567891011121314151617181920212223242526272829303132333435363738394041向下加速移动时,就是减小每次正常状态下落的时间间隔:/** * 向下直走 */private void down() { // 标记可以加速下落 immediate = true;}12345678如何变换图形方向,这里仅使用了非常简单的方法来实现方向变换,当然可以有更优的算法实现方向变换操作,大家可以自己研究:/** * 旋转方块图形 */private void rotate() { try { if (shape == 4) { // 方形,旋转前后是同一个形状 return; } else if (shape == 0) { // 条状 // 临时数组,放置旋转后图形 State; int startColumn = 0; // 找到图形开始的第一个方块位置 for (int i = 0; i 《 columns; i++) { if (map == State.ACTIVE) { startColumn = i; break; } } // 查找旋转之后是否有阻碍,如果有阻碍,则不旋转 for (int i = 0; i 《 4; i++) { for (int j = 0; j 《 4; j++) { if (map == State.STOPED) { return; } } } if (map == State.ACTIVE) { // 横向条形,变换为竖立条形 for (int i = 0; i 《 4; i++) { tmp = State.ACTIVE; for (int j = 1; j 《 4; j++) { tmp = State.EMPTY; } } blockRows = 4; } else { // 竖立条形,变换为横向条形 for (int j = 0; j 《 4; j++) { tmp = State.ACTIVE; for (int i = 0; i 《 3; i++) { tmp = State.EMPTY; } } blockRows = 1; } // 将原地图中图形修改为变换后图形 for (int i = 0; i 《 4; i++) { for (int j = 0; j 《 4; j++) { map; } } } else { // 临时数组,放置旋转后图形 State; int startColumn = columns; // 找到图形开始的第一个方块位置 for (int j = 0; j 《 3; j++) { for (int i = 0; i 《 columns; i++) { if (map == State.ACTIVE) { startColumn = i 《 startColumn ? i : startColumn; } } } // 判断变换后是否会遇到阻碍 for (int i = 0; i 《 3; i++) { for (int j = 0; j 《 3; j++) { if (map == State.STOPED) return; } } // 变换 for (int i = 0; i 《 3; i++) { for (int j = 0; j 《 3; j++) { tmp; } } // 将原地图中图形修改为变换后图形 for (int i = 0; i 《 3; i++) { for (int j = 0; j 《 3; j++) { map; } } // 重绘 repaint(); // 重新修改行指针 for (int i = 0; i 《 3; i++) { for (int j = 0; j 《 3; j++) { if (map != null || map != State.EMPTY) { rowIndex = rowIndex - i; blockRows = 3; return; } } } } } catch (Exception e) { // 遇到数组下标越界,说明不能变换图形形状,不作任何处理 }}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101当图形下落遇到阻碍时停止,我们就需要判断这时是否有某一行或几行可以消除掉,这时可以先获取每行中方块的个数,然后再进行判断:int; // 记录每行有方块的列数int eliminateRows = 0; // 消除的行数/* 计算每行方块数量 */for (int i = 0; i 《 rows; i++) { blocksCount = 0; for (int j = 0; j 《 columns; j++) { if (map == State.STOPED) blocksCount++; }}1234567891011如果有满行的方块,则消除掉该行方块:/* 实现有满行的方块消除操作 */for (int i = 0; i 《 rows; i++) { if (blocksCount == columns) { // 清除一行 for (int m = i; m 》= 0; m--) { for (int n = 0; n 《 columns; n++) { map; } } eliminateRows++; // 记录消除行数 }}12345678910111213最后我们再重绘显示积分就可以了。重复以上的生成图形、图形下落、左右下移动、判断消除行的操作,一个简单的俄罗斯方块就完成了。
基于Java语言的打地鼠小游戏的源代码
public void mouseClicked(MouseEvent e){ Object source=e.getSource(); //获取事件源,即地鼠标签 if(source instanceof JLabel){ //如果事件是标签组件 JLabel mouse=(JLabel)source; //强制转换为JLabel标签 mouse.setIcon(null); //取消标签图标 } } }); this.getContentPane().add(mouses); //添加显示地鼠的标签到窗体 } mouses.setLocation(253, 300); //设置每个标签的位置 mouses.setLocation(333, 250); mouses.setLocation(388, 296); mouses.setLocation(362, 364); mouses.setLocation(189, 353); mouses.setLocation(240, 409); final JLabel backLabel=new JLabel(); //创建显示背景的标签 backLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight()); this.setBounds(100,100,img.getIconWidth(),img.getIconHeight()); backLabel.setIcon(img); //添加背景到标签 this.getContentPane().add(backLabel); //添加背景标签到窗体 } /** * 线程的核心方法 */ public void run(){ while(true){ //使用无限循环 try{ Thread.sleep(3000); //使线程休眠3秒 int index=(int)(Math.random()*6); //生成随机的地鼠索引 if(mouses.getIcon()==null){ //如果地鼠标签没有设置图片 mouses.setIcon(imgMouse); //为该标签添加地鼠图片 } }catch(InterruptedException e){ e.printStackTrace(); } } } }

更多文章:
笑傲江湖李连杰林青霞:《笑傲江湖之东方不败》:沧海一声笑,滔滔两岸潮
2026年9月24日 01:10
妖精的尾巴之冰雪魔龙,妖精的尾巴第二季结束之后,还有没有后续了
2026年9月23日 21:40







