InfoBoard.java
上传用户:jennyfly
上传日期:2021-08-10
资源大小:735k
文件大小:2k
源码类别:

游戏

开发平台:

Java

  1. package view;
  2. import java.awt.Color;
  3. import java.awt.Font;
  4. import java.awt.Graphics;
  5. import java.awt.Graphics2D;
  6. import java.awt.image.BufferedImage;
  7. import javax.swing.JPanel;
  8. /**
  9.  * InfoBoard产生一个滚动循环的字幕介绍程序的相关情况,它继承JPanel并实现了Runnable
  10.  * 接口
  11.  * @author 何晓飞
  12.  * @version 2.0
  13.  */
  14.     public class InfoBoard extends JPanel implements Runnable{
  15. private static final long serialVersionUID = 1L;
  16. // 背景
  17. private BufferedImage back;
  18. // 控制字幕的线程
  19. private Thread autoScroll;
  20. //控制字幕位置的y偏移量
  21. private int offsetY;
  22. // 字幕
  23. private String[] captions;
  24. public InfoBoard() {
  25. // 获取图片
  26. back=ImageLoader.getInfoBack();
  27. // 内容
  28. captions= new String[] { "  连连看 2.0", "", "",
  29. "本游戏采用java语言编写,采用mvc模式设计",
  30. "",
  31. "玩家通过消去所有图片达到通关的目的",
  32. "",
  33. "游戏提供了:提示,演示,暂停,保存",
  34. "",
  35. "等诸多基本功能。",
  36. "",
  37. "此外程序提供了选择图片和音乐的功能",
  38. "",
  39. "玩家可以通过更换元素以提高游戏的娱乐性",
  40. "",
  41. "游戏共设十关",
  42. "",
  43. "程序提供了大部分可供扩展的接口",
  44. "",
  45. "有兴趣者可以很方便的扩展关数和功能",
  46. "",
  47. "如有问题,请mail到kevin1987725@163.com",
  48. "",
  49. "作者:西北工业大学  软件与微电子学院",
  50. "",
  51. "何晓飞  2008.12"};
  52. this.offsetY = captions.length * 20 - 80;
  53. // 判断线程是否运行
  54. if (this.autoScroll == null) {
  55. this.autoScroll = new Thread(this);
  56. this.autoScroll.start();
  57. }
  58. }
  59. // paintCoponent函数将组件画出
  60. public void paintComponent(Graphics g) {
  61. Graphics2D comp = (Graphics2D) g;
  62. // 设置颜色
  63. comp.setColor(Color.white);
  64. // 画矩形
  65. comp.fillRect(0, 0, this.getWidth(), this.getHeight());
  66. // 画图片
  67. comp.drawImage(back, 0, 0, this.getWidth(), this.getHeight(), this);
  68. // 设置字体
  69. comp.setFont(new Font("华文楷体", Font.PLAIN, 18));
  70. // 重绘
  71. comp.setColor(new Color(85, 26, 139));
  72. for (int i = 0; i < captions.length; i++) {
  73. comp.drawString(captions[i], 20, offsetY + i * 20);
  74. }
  75. }
  76. /**
  77.  * 线程每隔0.1秒刷新一次字幕,同时每条字幕的位置移动一个像素,
  78.  * 如果所有字幕已经显示完则重置Y偏移量
  79.  */
  80. public void run() {
  81. try {
  82. while (true) {
  83. Thread.sleep(100);
  84. if (--offsetY < -captions.length * 20)
  85. offsetY = this.getHeight() + 20;
  86. repaint();
  87. }
  88. } catch (InterruptedException ignore) {
  89. }
  90. }
  91. }