java小游戏做排名榜 java小游戏简单
一、谁帮我做个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="PC也是石头,打平了!!";
} else if(res== 0&&"剪刀".equals(data)){
data="PC是石头,PC赢了!!";
} else if(res== 0&&"布".equals(data)){
data="PC是石头,恭喜,你赢了!!";
} else if(res== 1&&"石头".equals(data)){
data="PC是剪刀,恭喜,你赢了!!";
} else if(res== 1&&"剪刀".equals(data)){
data="PC也是剪刀,打平了!!";
} else if(res== 1&&"布".equals(data)){
data="PC是剪刀,PC赢了!!";
} else if(res== 2&&"石头".equals(data)){
data="PC是布,PC赢了!!";
} else if(res== 2&&"剪刀".equals(data)){
data="PC是布,恭喜,你赢了!!";
} else if(res== 2&&"布".equals(data)){
data="PC也是布,打平了!!";
}
else{
data="PC不认识你出的拳";
}
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小游戏
俄罗斯方块:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Tetris extends JFrame{
public Tetris(){
TetrisPanel a= new TetrisPanel();
addKeyListener(a.listener);
add(a);
JMenuBar menu= new JMenuBar();
JMenu game= new JMenu("游戏");
game.add("新游戏");
game.add("暂停");
game.add("继续");
game.add("退出");
JMenu help= new JMenu("帮助");
help.add("关于");
menu.add(game);
menu.add(help);
this.setJMenuBar(menu);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(220, 275);
setTitle("Tetris内测版");
setResizable(false);
}
public static void main(String[] args){
new Tetris().setVisible(true);
}
}
//创建壹个俄罗斯方块类
class TetrisPanel extends JPanel{
public TimerListener listener= new TimerListener();
// blockType代表方块类型
// turnState代表方块情形
private int blockType;
private int score= 0;
private int turnState;
private int x;
private int y;
int flag= 0;
//定义已经放下的方块x=0-11,y=0-21;
int[][] map= new int[13][23];
//方块的形状第一组代表方块类型有S、Z、L、J、I、O、T 7种第二组代表旋转几次第三四组为方块矩阵
private final int shapes[][][]= new int[][][]{
// I
{{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0},
{ 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}},
// S
{{ 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{ 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}},
// Z
{{ 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
{ 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}},
// J
{{ 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
{ 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0},
{ 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
// O
{{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
// L
{{ 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
{ 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{ 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
// T
{{ 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0},
{ 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{ 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}}};
//初始化构造方式
public TetrisPanel(){
nextBlock();
newGame();
new Timer(1000, listener).start();
}
//生成新方块的方式
private void nextBlock(){
blockType=(int)(Math.random()* 1000)% 7;
turnState=(int)(Math.random()* 1000)% 4;
x= 4;
y= 0;
if(crash(x, y, blockType, turnState)== 0){
JOptionPane.showMessageDialog(null,"GAME OVER");
newGame();
}
}
//初始化地图
private void newGame(){
score= 0;
for(int i= 0; i< 12; i++){
for(int j= 0; j< 22; j++){
map[i][j]= 0;
map[11][j]= map[0][j]= 3;
}
map[i][21]= 3;
}
}
//旋转的方式
private void turn(){
turnState=(crash(x, y, blockType,(turnState+ 1)% 4)+ turnState)% 4;
repaint();
}
//左移的方式
private void left(){
x-= crash(x- 1, y, blockType, turnState);
repaint();
}
//右移的方式
private void right(){
x+= crash(x+ 1, y, blockType, turnState);
repaint();
}
//下落的方式
private void down(){
y+= crash(x, y+ 1, blockType, turnState);
if(crash(x, y+ 1, blockType, turnState)== 0){
add(x, y, blockType, turnState);
nextBlock();
}
repaint();
}
//是否碰撞的方式
private int crash(int x, int y, int blockType, int turnState){
for(int a= 0; a< 4; a++){
for(int b= 0; b< 4; b++){
if((shapes[blockType][turnState][a* 4+ b]& map[x+ b+ 1][y
+ a])== 1){
return 0;
}
}
}
return 1;
}
//尝试消行的方式
private void tryDelLine(){
for(int b= 0; b< 21; b++){
int c= 1;
for(int a= 0; a< 12; a++){
c&= map[a][b];
}
if(c== 1){
score+= 10;
for(int d= b; d> 0; d--){
for(int e= 0; e< 11; e++){
map[e][d]= map[e][d- 1];
}
}
}
}
}
//把当前添加map
private void add(int x, int y, int blockType, int turnState){
for(int a= 0; a< 4; a++){
for(int b= 0; b< 4; b++){
map[x+ b+ 1][y+ a]|= shapes[blockType][turnState][a* 4+ b];
}
}
tryDelLine();
}
//画方块的的方式
public void paintComponent(Graphics g){
super.paintComponent(g);
//画当前方块
for(int j= 0; j< 16; j++){
if(shapes[blockType][turnState][j]== 1){
g.fillRect((j% 4+ x+ 1)* 10,(j/ 4+ y)* 10, 10, 10);
}
}
//画已经固定的方块
for(int j= 0; j< 22; j++){
for(int i= 0; i< 12; i++){
if(map[i][j]== 1){
g.fillRect(i* 10, j* 10, 10, 10);
} else if(map[i][j]== 3){
g.drawRect(i* 10, j* 10, 10, 10);
}
}
}
g.drawString("score="+ score, 125, 10);
g.drawString("抵制不良游戏,", 125, 50);
g.drawString("回绝盗版游戏。", 125, 70);
g.drawString("注意自我保护,", 125, 90);
g.drawString("谨防受骗上当。", 125, 110);
g.drawString("适度游戏益脑,", 125, 130);
g.drawString("沉迷游戏伤身。", 125, 150);
g.drawString("合理安排时刻,", 125, 170);
g.drawString("享受健壮生活。", 125, 190);
}
//定时器监听和键盘监听
class TimerListener extends KeyAdapter implements ActionListener{
public void actionPerformed(ActionEvent e){
down();
}
public void keyPressed(KeyEvent e){
switch(e.getKeyCode()){
case KeyEvent.VK_DOWN:
down();
break;
case KeyEvent.VK_UP:
turn();
break;
case KeyEvent.VK_RIGHT:
right();
break;
case KeyEvent.VK_LEFT:
left();
}
}
}
}