import javax.swing.JFrame;public class Snake{public static void main(String[] args){//画出900*720的白色窗口JFrame frame =new JFrame("沈思嘉的贪吃独角兽");frame.setBounds(300,0,900,740);//窗体大小frame.setResizable(false);//固定窗体,大小不可调整frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出//添加画布SnakePanel panel=new SnakePanel();frame.add(panel);frame.setVisible(true);//显示窗体}
}import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;public class SnakePanel extends JPanel implements KeyListener,ActionListener{//加载所有图片ImageIcon title=new ImageIcon("title.png");ImageIcon up=new ImageIcon("up1.png");ImageIcon down=new ImageIcon("down1.png");ImageIcon left=new ImageIcon("left2.png");ImageIcon right=new ImageIcon("right2.png");ImageIcon love=new ImageIcon("love.png");ImageIcon food=new ImageIcon("food.png");//游戏分数int score=0;//蛇身体的长度int length=3;//蛇头的方向String direction="R";//放蛇的数组int[] snakex=new int[750];int[] snakey=new int[750];//随机产生食物Random r=new Random();int foodx=r.nextInt(34)*25+25;int foody=r.nextInt(24)*25+75;//游戏开始 关系到后面的空格键时间以及Timers是否开始boolean isStarted=false;//游戏结束 即蛇头是否撞到自己身体boolean isEnded=false;//蛇移动的原理就是不断的重画 重画的频率有timer控制,时间是毫秒Timer timer=new Timer(200,this);//控制蛇的移动速度public SnakePanel(){//构造函数,即给类初始化 即运行工程后的初始状态setup();//重置 初始化this.setFocusable(true);//选中焦点,即对画布上的按钮起作用this.addKeyListener(this);//键盘监听 即按键盘的时候程序有反应timer.start();//Timer类的启动,相当于定闹钟,然后工程开始repaint蛇才能运动}public void setup(){direction="R";//向右为默认方向length=3;score=0;snakex[0]=101;snakey[0]=101;snakex[1]=76;snakey[1]=101;snakex[2]=51;snakey[2]=101;isStarted=false;isEnded=false;}public void paint(Graphics g){//此函数相当于一支画笔,在panel画布上或各种东西(蛇 事物 文字)//贴图片上去,1。加载图片,2.贴上去title.paintIcon(this,g,25,10);//贴照片g.setColor(Color.PINK);//画笔颜色g.fillRect(25,75,850,625);//填充指定的矩形g.setColor(Color.BLACK);//重新定义画笔颜色//横线int i=75;while(i<=700){g.drawLine(25,i,875,i);//划线,坐标从哪到哪i=i+25;}//竖线int j=25;while(j<=875){g.drawLine(j,75,j,700);j=j+25;}//贴独角兽头if(direction.equals("R")){//键盘监听后对独角兽方向的判断后 在这里画出right.paintIcon(this,g,snakex[0],snakey[0]);}else if(direction.equals("L")){left.paintIcon(this,g,snakex[0],snakey[0]);}else if(direction.equals("U")){up.paintIcon(this,g,snakex[0],snakey[0]);}else if(direction.equals("D")){down.paintIcon(this,g,snakex[0],snakey[0]);}//贴爱心for(int m=1;m<length;m++){love.paintIcon(this,g,snakex[m],snakey[m]);}//贴食物food.paintIcon(this,g,foodx,foody);//画开始提示语if(!isStarted){//数据结构体判读出没开始 就在这画出下面的东西g.setFont(new Font("arial",Font.BOLD,30));//设置画笔的字体g.drawString("Press Space to Start/Pause",200,300);//画出文字}//游戏结束提示语if(isEnded){g.setFont(new Font("arial",Font.BOLD,30));//设置画笔的字体g.drawString("Game Over!/Press Space to Start",200,300);}//游戏分数g.setColor(Color.WHITE);g.setFont(new Font("arial",Font.BOLD,15));g.drawString("Score:"+score,700,25);g.drawString("Length:"+length,700,50);//repaint();//画板刷新}//这三个函数是在实现keyListener类时生成的函数 作用是监听键盘 我们是需要用第二个 即键盘按下时的反映public void keyTyped(KeyEvent e){}public void keyReleased(KeyEvent e){}public void keyPressed(KeyEvent e){//键盘按下时 工程需要的操作int keyCode=e.getKeyCode();//获取按键的keyCode值 每个键有不同的值//if(keyCode==KeyEvent.VK_SPACE){//判断按键是否是空格键 VK_SPACE就是空格键默认的值// isStarted=!isStarted;  //}if(keyCode==KeyEvent.VK_SPACE){//判断按键是否是空格键 VK_SPACE就是空格键默认的值if(isEnded){//如果是空格键且游戏结束了 就调用这个函数重置初始化 isEnded是false,首先就不会写出来,如果变为真则输出游戏结束语句,如果是空格且结束为真则再继续调用重置函数,再进行进行,那么这个什么时候变为真,吃到自己的时候setup();//length=3;}else{isStarted=!isStarted;}   }if(isStarted==true){if(keyCode==40&&direction!="U"){//独角兽运动的时候不能向上一个状态的反方向运动,例如,原先向右,下一次改变的方向不能为左。direction="D";}else if(keyCode==39&&direction!="L"){direction="R";}else if(keyCode==37&&direction!="R"){direction="L";}   else if(keyCode==38&&direction!="D"){direction="U";}}}public void actionPerformed(ActionEvent e){//这个函数是在实现ActionListener类生成的功能,当事件发生时才调用//定制一个闹钟,时间开始时是以闹钟响起时才开始,即paint();//timer.start();//但我试了一下并没什么用//身体if(isStarted && !isEnded){if(isStarted){for(int m=length;m>0;m--){snakex[m]=snakex[m-1];snakey[m]=snakey[m-1];}}//独角兽的变化if(direction.equals("R")){snakex[0]=snakex[0]+25;//如果等于851时直接执行了下面的语句下面的坐标为26了再运行上面贴图标的即坐标为了26图标就在26那个位置贴了没有贴到850那个坐标上面if(snakex[0]>851)snakex[0]=26;}if(direction.equals("L")){snakex[0]=snakex[0]-25;if(snakex[0]<26)snakex[0]=851;}if(direction.equals("U")){snakey[0]=snakey[0]-25;if(snakey[0]<76)snakey[0]=676;}if(direction.equals("D")){snakey[0]=snakey[0]+25;if(snakey[0]>676)snakey[0]=76;}//当独角兽吃到食物时if(snakex[0]==foodx+1 && snakey[0]==foody+1){length++;score++;foodx=r.nextInt(34)*25+25;foody=r.nextInt(24)*25+75;}for(int m=1;m<length;m++){if(snakex[0]==snakex[m]&&snakey[0]==snakey[m]){isEnded=true;}}for(int m=1;m<length;m++){if(snakex[0]==foodx+1 && snakey[0]==foody+1){foodx=r.nextInt(34)*25+25;foody=r.nextInt(24)*25+75;}}}//重画repaint();}}

暑假期间完成的贪吃独角兽相关推荐

  1. 暑假期间,怎么保护好孩子的视力?盘点适合孩子用的护眼台灯

    近些年的研究表明,暑假期间,大部分孩子不仅没有保护视力,反而是增进了眼睛的近视,在教育部在每年暑假期间都会发布有关防控近视的文章来警示,而要怎么保护好孩子的视力呢!我来分享适合孩子在家玩手机.看电视. ...

  2. NOI20102010年,世博会在中国上海举办,吸引了数以千万计的中外游客前来参观。暑假期间小Z也来到了上海世博园, 她对世博园的拥挤早有所闻,对有的展馆甚至要排上好几个小时的队才能进入也做好了充分

    NOI2010 2010年,世博会在中国上海举办,吸引了数以千万计的中外游客前来参观.暑假期间小Z也来到了上海世博园, 她对世博园的拥挤早有所闻,对有的展馆甚至要排上好几个小时的队才能进入也做好了充分 ...

  3. 不想当巨婴?暑假期间学点IT技能可好?

    每当炎炎夏日如期来临的时候,也正是学校放暑假的时候,将近三个月假期可以说真的很长,占了一年的四分之一时间.这么长的时间拿来荒废?在家里吃喝拉撒都靠着父母,父母不会吐槽嫌弃?虽然在爸爸妈妈眼里你还是个孩 ...

  4. 武汉大学计算机学院放假时间,计算机学院关于2019年学生放暑假的通知

    各学生班: 根据校历,2019年7月21日至8月31日为学校放暑假时间.为加强我院学生暑假期间的教育及管理工作,现将有关事项通知如下: 一.时间安排 在校普通本科生和研究生于7月21日(星期日)开始放 ...

  5. 暑期作息时间表模板_人民日报给孩子的暑假作息时间表,转给家长!

    暑假来了!孩子们都在想:辛苦了一学期,终于可以痛快玩了! 作为家长我们该怎么安排孩子的假期生活呢?家长常犯的错误有以下几种: 一.放任不管型任由孩子无节制地看电视玩游戏,晚上玩到很晚才睡,白天睡到中午 ...

  6. 2018年暑假 纪中培训总结

    感想 这个暑假在纪中过得挺充实的,劳逸结合,与同学们相处的很开心.算法也讲了很多,但是基本上都没听懂.在这里学习环境还是很不错的,纪中的同学也都很友善,在这里基本没遇到什么烦心事,每天都很开心. 来这 ...

  7. 什么灯适合学生在暑假使用?照度国AA级的舒适护眼灯

    在暑假期间是儿童以及青少年最容易近视的时期,国家教育部也发布了很多对保护视力的措施,其中有个是室内的照度是否适合孩子学习使用,亮度过暗或过暗都容易导致近视的,所学生在暑假写作业时,可以开启室内灯加上补 ...

  8. 读博期间如何发文章?

    首先在上一年里,做好充分的准备(当然是不可缺少的) 在你所研究的范围内,同时进行几个方向的思考和研究 并与在你的领域内的大牛们(或者其中一个)进行讨论,听听他们的意见大多的时候,他们的意见就是你的文章 ...

  9. 2014暑假学习总结

    计算机:B/S扫尾 java开始     假期伊始,计算机学习在B/S尾巴阶段,也是最有意思的一段,主要学习了javascript(三周),css+div(2天),JQuery(一周),Ajax(一周 ...

最新文章

  1. 【java】Maven工程引入各种jar包的功能
  2. Python基础08-数据类型:集合set
  3. 收藏一个有趣的帖子,现在的客户端真有点让人不安,难怪XSS。。。
  4. 数据仓库之 ETL漫谈
  5. oracle optimizer_features_enable,Oracle Optimizer:迁移到使用基于成本的优化器—–系列2.1-数据库专栏,ORACLE...
  6. 数据结构与算法--7.树的基础知识
  7. 终于!华为在欧盟注册新商标“Harmony”;亚马逊AWS宣布张文翊“新官上任”;甲骨文失去竞购100亿美元国防部云计算合同资格...
  8. 使用 imitator 实现前后端分离开发中的数据模拟与静态资源映射
  9. 【转】IT从业人员必看的10个论坛
  10. java开发web应用开发,Java Web应用开发概述
  11. 基于PCA降维实现人脸识别
  12. hbuildx打包成apk_基于HBuilder将H5站点打包成app
  13. BP 神经网络算法原理
  14. java项目上线发布的流程
  15. c语言程序设计教学工作总结,C语言教学的工作总结范文
  16. DLL载入内存的问题
  17. 何水无鱼?何山无石?何人无父?何女无夫?何树无枝?何城无市?
  18. seo优化时网站_选择关键词的方法
  19. juniper常用命令
  20. SpringCloud gateway (史上最全)

热门文章

  1. tripwire_用Tripwire保护Linux文件系统
  2. 恢复intellij idea默认主题或者颜色设置
  3. 打包时出现: Unable to prerender all routes
  4. 2022宁夏杯B题论文分析+完整代码(大学生就业问题分析)
  5. 逻辑推理与判断(谁是窃贼)
  6. Wisdom of the Crowd Voting:Truthful Aggregation of Voter Information and Preference(博弈论+机制设计) 论文阅读笔记
  7. Leetcode 611 有效三角形的个数
  8. IRS综述(一)Intelligent Reflflecting Surface-Aided Wireless Communications: A Tutorial
  9. oracle dmu,【学习笔记】The Database Migration Assistant for Unicode简称DMU
  10. Ubuntu 直接回到桌面