最后
分布式技术专题+面试解析+相关的手写和学习的笔记pdf
还有更多Java笔记分享如下:
撞到障碍物,游戏结束
代码实现
游戏启动类
public class Main {
public static void main(String[] args) {
Cuckoo frame = new Cuckoo();
while (true){
try {
Thread.sleep(100);
if(!frame.crash){
frame.repaint();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
核心类
/\*\*
\* 1.窗口
\* 2.背景
\* 3.移动墙
\* 4.布谷鸟
\* 5.障碍物
\* 6.背景音乐
\* 7.音效
\* 8.欢迎界面
\* 9.game over
\*/
public class Cuckoo extends Frame {
private int step;
private int score;
private int height;
private int moveLeft;
private int pipeMove;
boolean crash = false;
private boolean over = false;
private boolean start = false;
private static int bird_y = 270;
private static final int L_X = 800;
private static final int L_Y = 200;
private static final int SPEED = 2;
private static final int BIRD_X = 100;
private static final int GAME_X_Y_0 = 0;
private static final int GAME_WIDTH = 288;
private static final int GAME_HEIGHT = 512;
private static final int PIPE_WIDTH = ImageMgr.pipe.getWidth();
private static final int PIPE_HEIGHT = ImageMgr.pipe.getHeight();
private static final int READY_WIDTH = ImageMgr.ready.getWidth();
private static final int READY_HEIGHT = ImageMgr.ready.getHeight();
private static final int START_WIDTH = ImageMgr.start.getWidth();
private static final int BIRD_WIDTH = ImageMgr.bird[0].getWidth();
private static final int BIRD_HEIGHT = ImageMgr.bird[0].getWidth();
private static final int GROUND_HEIGHT = ImageMgr.ground.getHeight();
private static final int GAME_OVER_WIDTH = ImageMgr.gameOver.getWidth();
private static final int GAME_OVER_HEIGHT = ImageMgr.gameOver.getHeight();
private static final int BACKGROUND_HEIGHT = ImageMgr.background.getHeight();
private static Image offScreenImage;
private static Rectangle pipeRectangle1;
private static Rectangle pipeRectangle2;
private static Rectangle birdRectangle;
Cuckoo(){
setVisible(true);
setResizable(false);
//setTitle("cuckoo");
setBounds(L_X, L_Y,GAME_WIDTH,GAME_HEIGHT);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()){
case KeyEvent.VK_SPACE : start = true;break;
case KeyEvent.VK_ENTER : reopen();break;
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
bird_y -= 20;
}
}
});
addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
@Override
public void update(Graphics g) {
if(offScreenImage == null){
offScreenImage = this.createImage(GAME_WIDTH,GAME_HEIGHT);
}
Graphics gOffScreen = offScreenImage.getGraphics();
Color c = gOffScreen.getColor();
gOffScreen.setColor(Color.BLACK);
gOffScreen.fillRect(0,0,GAME_WIDTH,GAME_HEIGHT);
gOffScreen.setColor(c);
paint(gOffScreen);
g.drawImage(offScreenImage,0,0,null);
}
@Override
public void paint(Graphics g) {
background(g);
ground(g);
start(g);
if(start){
bird(g);
pipe(g);
colliedWith();
gameOver(g);
score(g);
}
}
//如果碰撞后,可以嗯enter键重开
private void reopen(){
if(crash){
score = 0;
over = false;
crash = false;
start = false;
moveLeft = 0;
pipeMove = 0;
//bird\_y = 270;//继上次死的位置开始
}
}
private void score(Graphics g){
Font font = new Font("微软雅黑",Font.BOLD,18);
g.setFont(font);
Color c = g.getColor();
g.setColor(Color.lightGray);
g.drawString("score " + score,20,70);
g.setColor(c);
}
private void background(Graphics g){
g.drawImage(ImageMgr.background,
GAME_X_Y_0 - moveLeft,GAME_X_Y_0,
GAME_WIDTH - moveLeft,GAME_HEIGHT,
GAME_X_Y_0,
GAME_X_Y_0,
GAME_WIDTH,
GAME_HEIGHT, null);
g.drawImage(ImageMgr.background,
GAME_WIDTH-1 - moveLeft,GAME_X_Y_0,
GAME_WIDTH\*2 - moveLeft, GAME_HEIGHT,
GAME_X_Y_0,
GAME_X_Y_0,
GAME_WIDTH,
GAME_HEIGHT, null);
moveLeft += SPEED;
//游戏启动计分
if(start && moveLeft % 100 == 0){
score += 1;
}
if(moveLeft >= GAME_WIDTH){
moveLeft = 0;
}
}
private void ground(Graphics g){
g.drawImage(ImageMgr.ground,0,BACKGROUND_HEIGHT - GROUND_HEIGHT,null);
}
private void bird(Graphics g){
Color c = g.getColor();
g.setColor(Color.BLUE);
g.drawRect(BIRD_X, bird_y,BIRD_WIDTH,BIRD_HEIGHT);
g.setColor(c);
g.drawImage(ImageMgr.bird[step++], BIRD_X, bird_y,null);
if(step >= ImageMgr.bird.length){
step = 0;
}
if(start){
bird_y += 4;
}
birdRectangle = new Rectangle(BIRD_X,bird_y,BIRD_WIDTH,BIRD_HEIGHT);
}
private void pipe(Graphics g){
drawPipe(g);
pipeMove += SPEED;
if(pipeMove >= GAME_WIDTH + PIPE_WIDTH){
pipeMove = 0;
Random ran = new Random();
height = ran.nextInt(10)\*20;
drawPipe(g);
}
# 总结
大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。
**麻烦帮忙转发一下这篇文章+关注我**
![就这一次!拼多多内部架构师培训Kafka源码笔记(现已绝版)](https://img-blog.csdnimg.cn/img_convert/46a512f8ae86866362399749db9b34c4.webp?x-oss-process=image/format,png)
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**
中...(img-vaJiOXFS-1715557713953)]
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)**