import java.awt.Color;
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都网站建设、茫崖网络推广、小程序开发、茫崖网络营销、茫崖企业策划、茫崖品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供茫崖建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
public class 贪吃蛇 extends JFrame implements ActionListener, KeyListener,Runnable {
private static final long serialVersionUID = 1L;//表明实现序列化类的不同版本间的兼容性默认的是1L,不加有异常。
private JMenuBar menuBar;
private JMenu youXiMenu,nanDuMenu,fenShuMenu,guanYuMenu;
private JMenuItem kaiShiYouXi,exitItem,zuoZheItem,fenShuItem;
private JCheckBoxMenuItem cJianDan,cPuTong,cKunNan;
private int length = 6;
private Toolkit toolkit;
private int i,x,y,z,objectX,objectY,object=0,growth=0,time;//bojecx,y是食物的坐标z为蛇前进方向。。
private int m[]=new int[50];
private int n[]=new int[50];
private Thread she = null; //静态对象蛇
private int life=0; //初始化变量 食物分数
private int foods = 0;
private int fenshu=0;
public void run(){
time=500;
for(i=0;i=length-1;i++){
m[i]=90-i*10;n[i]=60;
}
x=m[0];
y=n[0];
z=4;
while(she!=null){
check();
try{
Thread.sleep(time);
}catch(Exception ee){
System.out.println(z+"");
}
}
}
public 贪吃蛇() {
//创建新的对象
setVisible(true);
menuBar = new JMenuBar();
toolkit=getToolkit();
//设计界面元素 游戏菜单对象
youXiMenu = new JMenu("游戏菜单");
kaiShiYouXi = new JMenuItem("开始游戏");
exitItem = new JMenuItem("退出游戏");
//游戏困难对象
nanDuMenu = new JMenu("困难程度");
cJianDan = new JCheckBoxMenuItem("简单");
cPuTong = new JCheckBoxMenuItem("普通");
cKunNan = new JCheckBoxMenuItem("困难");
//游戏分数菜单对象
fenShuMenu = new JMenu("积分排行");
fenShuItem = new JMenuItem("最高记录");
//关于对象菜单
guanYuMenu = new JMenu("关于");
zuoZheItem = new JMenuItem("关于作者");
//设置关于作者菜单
guanYuMenu.add(zuoZheItem); //关于作者
//关于困难程度菜单
nanDuMenu.add(cJianDan); //难度简单
nanDuMenu.add(cPuTong); //普通
nanDuMenu.add(cKunNan); //困难
//关于游戏菜单栏
fenShuMenu.add(fenShuItem); //设置分数栏
youXiMenu.add(kaiShiYouXi); // 设置加开始游戏栏
youXiMenu.add(exitItem); // 设置游戏结束栏
menuBar.add(youXiMenu); //设置 游戏菜单栏
menuBar.add(nanDuMenu); //设置困难程度菜单栏
menuBar.add(fenShuMenu); //设置分数(积分)菜单栏
menuBar.add(guanYuMenu); //设置关于菜单栏
zuoZheItem.addActionListener(this); //监听注册
kaiShiYouXi.addActionListener(this);
exitItem.addActionListener(this);
addKeyListener(this); //添加指定的按键侦听器,以接收发自此组件的按键事件
fenShuItem.addActionListener(this);
//设置 游戏快捷键
KeyStroke keyOpen = KeyStroke.getKeyStroke('O',InputEvent.CTRL_DOWN_MASK);
kaiShiYouXi.setAccelerator(keyOpen);
KeyStroke keyExit = KeyStroke.getKeyStroke('X',InputEvent.CTRL_DOWN_MASK);
exitItem.setAccelerator(keyExit);
//设置游戏框架
setJMenuBar(menuBar);
setTitle("贪吃蛇");
setResizable(false);
setBounds(300,200,400,400);
validate(); //验证有效性
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new 贪吃蛇();//菜单监听
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==kaiShiYouXi){ //菜单监听点击开始游戏
length = 6; //设置贪吃蛇的初始长度大小为 6个方块
life = 0; //生命 即分数为0
foods = 0; //所吃食物为0
if(she==null){
she=new Thread(this);
she.start();
}else if(she!=null){
she=null;
she= new Thread(this);
she.start();
}
}
if(e.getSource()==exitItem){
System.exit(0);
}
if(e.getSource()==zuoZheItem){
JOptionPane.showMessageDialog(this, "等制作"+"\n\n"+" "+"上下左右控制没有暂停哦"+"\n");
}
if(e.getSource()==fenShuItem){
JOptionPane.showMessageDialog(this,"最高记录为"+fenshu+"");
}
}
//测试一下
public void check(){
isDead();
if(she!=null){
if(growth==0){
reform(); //得到食物
}else{
upgrowth(); //生成食物
}
if(x==objectXy==objectY){
object=0;
growth=1;
toolkit.beep();
}
//食物坐标
if(object==0){
object=1;
objectX=(int)Math.floor(Math.random()*39)*10;
objectY=(int)Math.floor(Math.random()*29)*10+50;
}
this.repaint(); //重新生成食物
}
}
void isDead(){
//判断游戏是否结束的方法
if(z==4){ //Z代表蛇的移动方向 x y代表物体坐标 设置了x y 窗口大小(判断蛇是否吃到食物)
x=x+10;
}else if(z==3){
x=x-10;
}else if(z==2){
y=y+10;
}else if(z==1){
y=y-10;
}
if(x0||x390||y50||y390){ //判断是否撞墙
she=null;
}
for(i=1;ilength;i++){
if(m[i]==xn[i]==y){
she=null;
}
}
}
public void upgrowth(){
//当蛇吃到东西时的方法
if(length50){
length++; //长度累加
}
growth--;
time=time-10; //当蛇吃到一个 时间打九折 懂??? 吃的越多蛇运动的越快
reform();
life+=100;
if(fenshulife){
fenshu = life;//分数就是吃一个食物给一百分。。。
}
foods++;
}
public void reform(){
for(i=length-1;i0;i--){ // 更新蛇的每一节坐标 依次把前一节付给下一节移动坐标
m[i]=m[i-1];
n[i]=n[i-1];
}
if(z==4){
m[0]=m[0]+10;
}
if(z==3){
m[0]=m[0]-10;
}
if(z==2){
n[0]=n[0]+10;
}
if(z==1){
n[0]=n[0]-10;
}
}
public void keyPressed(KeyEvent e){ //按下键盘方向键
// z代表蛇的移动方向 设置方向快捷键
if(she!=null){
if(e.getKeyCode()==KeyEvent.VK_UP){ //上键
if(z!=2){ //先前方向不为左
z=1;
check();
}
}else if(e.getKeyCode()==KeyEvent.VK_DOWN){ //下
if(z!=1){
z=2;
check();
}
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){ //左
if(z!=4){
z=3;
check();
}
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){ //右
if(z!=3){
z=4;
check();
}
}
}
}
public void keyReleased(KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
//在面板上绘制界面
public void paint(Graphics g) {
g.setColor(Color.blue); //设置背景 颜色
g.fillRect(0,50,400,400);
g.setColor(Color.yellow);//设置蛇的颜色
for(i=0;i=length-1;i++){
g.fillRect(m[i],n[i],10,10); //食物的位置
}
g.setColor(Color.green); //蛇的食物 的颜色
g.fillRect(objectX,objectY,10,10); //蛇的初始位置
g.setColor(Color.white);
g.drawString("当前 分数"+this.life,6,60);
g.drawString("当前已吃食物数"+this.foods,6,72);
}
}
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
//=============================================
//Main Class
//=============================================
public class GreedSnake implements KeyListener
{
JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScore;//计分牌
SnakeModel snakeModel=null;// 蛇
public static final int canvasWidth=200;
public static final int canvasHeight=300;
public static final int nodeWidth=10;
public static final int nodeHeight=10;
//----------------------------------------------------------------------
//GreedSnake():初始化游戏界面
//----------------------------------------------------------------------
public GreedSnake()
{
//设置界面元素
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(this);
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(this);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
begin();
}
//----------------------------------------------------------------------
//keyPressed():按键检测
//----------------------------------------------------------------------
public void keyPressed(KeyEvent e)
{
int keyCode=e.getKeyCode();
if(snakeModel.running) switch(keyCode)
{
case KeyEvent.VK_UP:
snakeModel.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
snakeModel.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
snakeModel.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
snakeModel.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
snakeModel.speedUp();// 加速
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
snakeModel.speedDown();// 减速
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
snakeModel.changePauseState();// 暂停或继续
break;
default:
}
//重新开始
if(keyCode==KeyEvent.VK_R || keyCode==KeyEvent.VK_S
|| keyCode==KeyEvent.VK_ENTER)
{
snakeModel.running=false;
begin();
}
}
//----------------------------------------------------------------------
//keyReleased():空函数
//----------------------------------------------------------------------
public void keyReleased(KeyEvent e)
{
}
//----------------------------------------------------------------------
//keyTyped():空函数
//----------------------------------------------------------------------
public void keyTyped(KeyEvent e)
{
}
//----------------------------------------------------------------------
//repaint():绘制游戏界面(包括蛇和食物)
//----------------------------------------------------------------------
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=snakeModel.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=snakeModel.food;
drawNode(g,n);
updateScore();
}
//----------------------------------------------------------------------
//drawNode():绘画某一结点(蛇身或食物)
//----------------------------------------------------------------------
private void drawNode(Graphics g,Node n)
{
g.fillRect(n.x*nodeWidth,n.y*nodeHeight,nodeWidth-1,nodeHeight-1);
}
//----------------------------------------------------------------------
//updateScore():改变计分牌
//----------------------------------------------------------------------
public void updateScore()
{
String s="Score: "+snakeModel.score;
labelScore.setText(s);
}
//----------------------------------------------------------------------
//begin():游戏开始,放置贪吃蛇
//----------------------------------------------------------------------
void begin()
{
if(snakeModel==null||!snakeModel.running)
{
snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,
this.canvasHeight/nodeHeight);
(new Thread(snakeModel)).start();
}
}
//----------------------------------------------------------------------
//main():主函数
//----------------------------------------------------------------------
public static void main(String[] args)
{
GreedSnake gs=new GreedSnake();
}
}
/**************************************************************************
*文件名:SnakeModel.java
*作者:C.Jason
*要点分析:
*1)数据结构:matrix[][]用来存储地图上面的信息,如果什么也没有设置为false,
* 如果有食物或蛇,设置为true;nodeArray,一个LinkedList,用来保存蛇的每
* 一节;food用来保存食物的位置;而Node类是保存每个位置的信息。
*2)重要函数:
* changeDirection(int newDirection) ,用来改变蛇前进的方向,而且只是
* 保存头部的前进方向,因为其他的前进方向已经用位置来指明了。 其中newDirection
* 必须和原来的direction不是相反方向,所以相反方向的值用了同样的奇偶性。在测试
* 的时候使用了direction%2!=newDirection%2 进行判断。
* moveOn(),用来更新蛇的位置,对于当前方向,把头部位置进行相应改变。如果越界,
* 结束;否则,检测是否遇到食物(加头部)或身体(结束);如果什么都没有,加上头部,
* 去掉尾部。由于用了LinkedList数据结构,省去了相当多的麻烦。
*************************************************************************/
import java.util.*;
import javax.swing.*;
//----------------------------------------------------------------------
//Node:结点类
//----------------------------------------------------------------------
class Node
{
int x;
int y;
Node(int x,int y)
{
this.x=x;
this.y=y;
}
}
//----------------------------------------------------------------------
//SnakeModel:贪吃蛇模型
//----------------------------------------------------------------------
class SnakeModel implements Runnable
{
GreedSnake gs;
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和DOWN是偶数,RIGHT和LEFT是奇数
public static final int UP=2;
public static final int DOWN=4;
public static final int LEFT=1;
public static final int RIGHT=3;
//----------------------------------------------------------------------
//GreedModel():初始化界面
//----------------------------------------------------------------------
public SnakeModel(GreedSnake gs,int maxX,int maxY)
{
this.gs=gs;
this.maxX=maxX;
this.maxY=maxY;
matrix=new boolean[maxX][];
for(int i=0;imaxX;++i)
{
matrix[i]=new boolean[maxY];
Arrays.fill(matrix[i],false);// 没有蛇和食物的地区置false
}
//初始化贪吃蛇
int initArrayLength=maxX20 ? 10 : maxX/2;
for(int i=0;iinitArrayLength;++i)
{
int x=maxX/2+i;
int y=maxY/2;
nodeArray.addLast(new Node(x,y));
matrix[x][y]=true;// 蛇身处置true
}
food=createFood();
matrix[food.x][food.y]=true;// 食物处置true
}
//----------------------------------------------------------------------
//changeDirection():改变运动方向
//----------------------------------------------------------------------
public void changeDirection(int newDirection)
{
if(direction%2!=newDirection%2)// 避免冲突
{
direction=newDirection;
}
}
//----------------------------------------------------------------------
//moveOn():贪吃蛇运动函数
//----------------------------------------------------------------------
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=xxmaxX)(0=yymaxY))
{
if(matrix[x][y])// 吃到食物或者撞到身体
{
if(x==food.xy==food.y)// 吃到食物
{
nodeArray.addFirst(food);// 在头部加上一结点
//计分规则与移动长度和速度有关
int scoreGet=(10000-200*countMove)/timeInterval;
score+=scoreGet0 ? 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;//越界(撞到墙壁)
}
//----------------------------------------------------------------------
//run():贪吃蛇运动线程
//----------------------------------------------------------------------
public void run()
{
running=true;
while(running)
{
try
{
Thread.sleep(timeInterval);
}catch(Exception e)
{
break;
}
if(!paused)
{
if(moveOn())// 未结束
{
gs.repaint();
}
else//游戏结束
{
JOptionPane.showMessageDialog(null,"GAME OVER",
"Game Over",JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running=false;
}
//----------------------------------------------------------------------
//createFood():生成食物及放置地点
//----------------------------------------------------------------------
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);
}
//----------------------------------------------------------------------
//speedUp():加快蛇运动速度
//----------------------------------------------------------------------
public void speedUp()
{
timeInterval*=speedChangeRate;
}
//----------------------------------------------------------------------
//speedDown():放慢蛇运动速度
//----------------------------------------------------------------------
public void speedDown()
{
timeInterval/=speedChangeRate;
}
//----------------------------------------------------------------------
//changePauseState(): 改变游戏状态(暂停或继续)
//----------------------------------------------------------------------
public void changePauseState()
{
paused=!paused;
}
}
/**
需求:奖客富翁游戏。
菜单为:
1.注册用户信息。填写用户名,密码,电脑随机输出一个4位
数字作为会员卡号。提示用户名,密码,及会员卡号。可选择第二步了
2.登陆。校验是否已注册(是否存在会员卡号)。如果为空,
提示用户不存在。
如果用户名通过,密码错误,提示用户名和密码不匹配。如果
验证成功结束。如果输入的用户名密码均匹配,给出登陆成功提示。
可选择第三步了。
3.先判断用户是否已登陆(是否存在会员卡)
询问是否进行抽奖,选Y,电脑随机输出5个4位
数字。如果其中有一个数字与用户卡号相同,则为中奖,奖励
人民币为卡号数字的金额。否则,谢谢参与。程序退出。
*/
import java.util.Scanner;
import java.util.Random;
public class RichPerson {
public static void main(String[] args) {
// 输出菜单。
for (int a = 0; a 6; a++) {
System.out.print("*");
}
System.out.print("欢迎进入奖客富翁系统");
for (int b = 0; b 6; b++) {
System.out.print("*");
}
System.out.print("\n\t\t1.注册\n" + "\t\t2.登录\n" + "\t\t3.抽奖\n");
for (int c = 0; c 31; c++) {
System.out.print("*");
}
// 输出菜单结束。
int caidan = 0;// 操作菜单
String name = null;// 会员注册名字
String myname = null;// 会员登录名字
String password = null;// 会员注册密码
String mypassword = null;// 会员登录密码
int number = 0;// 会员卡号
// int luckynumber=0;//幸运号码
String str = null;// 询问是否重试
// 输入数字选择菜单。
Scanner input = new Scanner(System.in);
Random output = new Random();
do {
System.out.println("\n请选择菜单:");
caidan = input.nextInt();
switch (caidan) {
case 1:
System.out.println("欢迎注册富翁,请依次输入用户名和密码");
System.out.println("用户名:");
name = input.next();
System.out.println("密码:");
password = input.next();
// 随机给出4位数的会员卡号
number = output.nextInt(8999) + 1000;
System.out.println("注册成功!您的用户名:" + name + ",密码:" + password
+ ",会员卡号:" + number + "。请牢记!");
break;
case 2:
// 先判断用户是否已注册。
if (name == null) {
System.out.println("您好,请先注册!");
break;
} else {
System.out.println("欢迎登录富翁,请依次输入用户名和密码!");
// 用户名和密码匹配校验次数设置为3次。
for (int x = 0; x 3; x++) {
System.out.println("用户名:");
myname = input.next();
if (!myname.equals(name)) {
System.out.println("用户" + myname + "不存在!请重试,剩余次数"
+ (2 - x) + "次!");
} else {
System.out.println("密码:");
}
mypassword = input.next();
if (!mypassword.equals(password)) {
System.out.println(myname + "密码错误!" + "请重试,剩余次数"
+ (2 - x) + "次!");
} else {
System.out.println("登陆成功!");
break;
}
}
}
break;
case 3:
// 判断用户是否已注册,是否已登录。
if (mypassword == null) {
System.out.println("您好,请先登录!");
break;
} else if (!mypassword.equals(password)) {
System.out.println("您好,请先重试登录!");
break;
} else if (mypassword.equals(password)) {
System.out.println("欢迎进入富翁,请问是否进行幸运抽奖(y/n)?");
String choujiang = input.next();
if (choujiang.equals("y")) {
int[] luckynumber = new int[5];
for (int m = 0; m 5; m++) {
luckynumber[m] = output.nextInt(8999) + 1000;
}
for (int m = 0; m 5; m++) {
System.out.print(luckynumber[m] + "\t");
}
System.out.println("\n" + number);
for (int m = 0; m 5; m++) {
if (number == luckynumber[m]) {
System.out.println("\n中奖!金额为:" + luckynumber);
break;
} else {
System.out.println("\n木有中奖!");
break;
}
}
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款