关于我,十九线程序员小 UP

从编程小白到腾讯,再到 20w 粉知识博主,希望我的经历能帮助到你。

程序员鱼皮

98 年生,有野心的天蝎座,20 届本科毕业加入 腾讯,从事全栈应用开发,同时也是 腾讯云开发高级布道师

我热爱学习和分享编程技术,在公众号、抖音、B 站、知乎、GitHub 等多个平台创作(都叫 “程序员鱼皮”),全网累计收获近 20w 粉丝的关注。

我熟悉多种编程语言和技术栈,包括但不限于 Java 后端、前端、小程序开发,在校期间就带工作室建设了几十个校园网站,以 专业第一 的成绩拿过国家奖学金、挑战杯学术竞赛国奖、上海市优秀毕业生,出版过区块链教材,也曾有过字节跳动、腾讯等三家公司的实习经历,甚至还有段创业经历,并成功积分落户上海。

此外,我独立开发了【编程导航】全栈项目,已经帮助上万名小伙伴找到优质编程学习资源!

编程导航,发现优质编程资源

知识分享

我知道自学编程这条路充满艰辛,因此致力知识分享,短短几个月,在 个人公众号(程序员鱼皮) 原创 89 篇文章、60 多个视频,包括进大厂的学习经验、提高编程效率的技巧、技术干货、有趣的实战项目、大厂工作日记、编程避坑指南、个人成长感悟等,希望能 帮大家少走弯路

公众号中,我对原创文章进行了精选和分类,其中几篇文章,单篇转载量就接近 30 次,阅读后的小伙伴收获满满。

微信扫码或搜索,即可关注:程序员鱼皮

关注后回复【资源】,还有鱼皮为大家 精心准备 的 6T 全套学习资料~

最后再送大家 帮助我拿到大厂 offer 的学习资源 ,比如这份精美的【谷歌大佬算法刷题笔记】(提取码:qfx8):

谷歌大佬总结的算法刷题指南,助你搞定程序员面试

还有全套视频教程 + 习题 + 答案 + 源码、可在线使用的编程导航、上千本编程书籍、几百份大厂面经、实战项目等,高达 6 T

跑了,留下 6T 的资源!


我的成长

我在公众号中分享自己:从 0 自学进入腾讯 的编程学习、实习、求职、考证、写书经历,希望帮助大家少走弯路、不再迷茫!

帮助很多小伙伴找到了学习目标和方向,也希望能帮助到你。


共勉

相信自己有能力,那么你就真的会有!

好的,我可以为您编写一个基于Java语言的AI贪吃蛇。以下是实现该游戏所需的步骤: 1. 创建游戏画面并绘制初始的贪吃蛇和食物。 2. 实现贪吃蛇的移动,这可以通过定义一个Snake类来实现,类中包含蛇的长度、位置和移动方式等属性和方法。 3. 实现贪吃蛇的碰撞检测,当蛇头撞到墙壁或自己的身体时游戏结束。 4. 实现食物的随机生成和与贪吃蛇的碰撞检测。 5. 在界面上显示得分和游戏结束信息。 以下是Java代码示例,希望能够满足您的需求: ``` import java.awt.Color; import java.awt.Graphics; import java.awt.Point; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; public class AI_Snake extends JPanel implements Runnable, KeyListener { private static final long serialVersionUID = 1L; private static final int WIDTH = 300; private static final int HEIGHT = 300; private Thread thread; private boolean running; private boolean right = true, left = false, up = false, down = false; private Snake snake; private List<Point> foods; private int score; private boolean gameover; public AI_Snake() { setPreferredSize(new Dimension(WIDTH, HEIGHT)); setFocusable(true); addKeyListener(this); snake = new Snake(); foods = new ArrayList<Point>(); start(); } private void start() { running = true; thread = new Thread(this); thread.start(); } private void stop() { running = false; try { thread.join(); } catch (InterruptedException e) { e.printStackTrace(); } } private void generateFood() { Random rand = new Random(); int x = rand.nextInt(WIDTH / 10) * 10; int y = rand.nextInt(HEIGHT / 10) * 10; foods.add(new Point(x, y)); } private boolean checkCollision() { int headX = snake.getHead().x; int headY = snake.getHead().y; if (headX < 0 || headX >= WIDTH || headY < 0 || headY >= HEIGHT) { return true; } for (Point p : snake.getBody()) { if (headX == p.x && headY == p.y) { return true; } } return false; } private boolean checkFood() { int headX = snake.getHead().x; int headY = snake.getHead().y; for (Point p : foods) { if (headX == p.x && headY == p.y) { foods.remove(p); snake.grow(); score++; return true; } } return false; } private void draw(Graphics g) { g.clearRect(0, 0, WIDTH, HEIGHT); g.setColor(Color.BLACK); g.drawRect(0, 0, WIDTH, HEIGHT); g.drawString("Score: " + score, 10, 20); if (gameover) { g.drawString("Game Over", WIDTH / 2 - 30, HEIGHT / 2); } else { snake.draw(g); for (Point p : foods) { g.fillRect(p.x, p.y, Snake.SIZE, Snake.SIZE); } } } @Override public void run() { while (running) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } if (gameover) { stop(); break; } snake.move(right, left, up, down); if (checkCollision()) { gameover = true; continue; } if (checkFood()) { generateFood(); } repaint(); } } @Override public void keyPressed(KeyEvent e) { switch(e.getKeyCode()) { case KeyEvent.VK_RIGHT: right = true; left = false; up = false; down = false; break; case KeyEvent.VK_LEFT: right = false; left = true; up = false; down = false; break; case KeyEvent.VK_UP: right = false; left = false; up = true; down = false; break; case KeyEvent.VK_DOWN: right = false; left = false; up = false; down = true; break; default: break; } } @Override public void keyTyped(KeyEvent e) {} @Override public void keyReleased(KeyEvent e) {} public static void main(String[] args) { JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setResizable(false); frame.setTitle("AI Snake"); frame.add(new AI_Snake(), BorderLayout.CENTER); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } private static class Snake { private static final int SIZE = 10; private List<Point> body; public Snake() { body = new ArrayList<Point>(); body.add(new Point(50, 50)); body.add(new Point(40, 50)); body.add(new Point(30, 50)); } public List<Point> getBody() { return body; } public Point getHead() { return body.get(0); } public void grow() { Point last = body.get(body.size() - 1); body.add(new Point(last.x, last.y)); } public void move(boolean right, boolean left, boolean up, boolean down) { for (int i = body.size() - 1; i > 0; i--) { Point curr = body.get(i); Point prev = body.get(i - 1); curr.x = prev.x; curr.y = prev.y; } Point head = getHead(); if (right) head.x += SIZE; if (left) head.x -= SIZE; if (up) head.y -= SIZE; if (down) head.y += SIZE; } public void draw(Graphics g) { for (Point p : body) { g.fillRect(p.x, p.y, SIZE, SIZE); } } } } ```
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员鱼皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值