OpenAI最新大模型GPT-4o体验之Code Copilot AI编程大模型
一、前言
GPT-4o(\"o\"代表\"全能\")具备处理各种文本、声音和图像资料的能力,能够输出多种格式的文本、声音和图像。
GPT-4o 的推出标志着 AI 技术的重大突破。它不再局限于单一媒介,而是首次实现了文本、语音和图像的无缝整合。这种多媒体的即时响应能力完全突破了传统人机交互的界限,使交流变得更加自然和流畅,引领了一场全新的交互革命。用户无需在不同的应用间切换来适应各种输入输出形式,GPT-4o 可以一站式处理所有信息类型,无论是文字问题、语音命令还是图像分析,都能迅速提供准确的反馈,大幅提升了效率和用户体验,开启了交流的新时代。
在最新版本的 ChatGPT 中,这种能力得到了进一步加强,使得处理不同媒体形式的输入输出更加轻松自如。无论是日常对话和娱乐,还是专业领域的任务,如编程、数据分析、图形设计或视频编辑,GPT-4o 都能轻松胜任,成为用户必不可少的生产力工具。
二、ChatGPT 4o 国内直接使用
介绍
ChatGPT4o功能:GPT-4o文本对话(支持联网查询)、Code Copilot(写代码、改bug、算法优化等)、DALL-E AI绘画、AI语音对话(练习英语口语、模拟技术面试)、论文插件Consensus、专职家教(精通语数外,拍照上传即可识别问题,给出权威回答,亦可用于模拟考试)、上传文件、数据分析插件Data Analyst等100+GPTS插件。
网址:https://ssas.kupepoem.cn
网站优点:
-
支持OpenAI最新的ChatGPT4o。
-
同时支持PC、手机、平板。
-
不需要国外特殊网络,可以直接使用,非常方便 。
-
系统运行非常稳定 。
支持官方最新推出的ChatGPT4o
支持官方最新出的GPTs,100+大模型
写作相关的
生产力相关的
研究与分析相关的
教育相关的
编程相关的
Code Copilot AI编程大模型
探索GPT-->编程--》选择Code Copilot
开始聊天。
进入聊天界面。
用Java编写一个二分查找的代码,添加中文注释。
输入:
用Java编写一个二分查找的代码,添加中文注释。
给出了完整的Java代码类,代码中也包含了完善的注释。并给出了很清晰的解析和进一步优化建议。把代码拷到idea里运行。验证下结果:
结果是正确的。
生成一个java实战课程设计:做一个贪吃蛇游戏
输入:
你是一位java技术专家,游戏开发高手,请用java开发一个贪吃蛇游戏,添加中文注释,有个开始按钮和暂停按钮。
给了两个类的完整代码。还给了改进建议,我们先去idea运行看看。把代码复制进来。
运行代码。结果:
程序有点小问题,蛇吃不到食物。如图。蛇跟食物会重叠一部分
让 Code Copilot 帮我解决这个问题。直接把出问题的截图给它。
重新生成的代码复制到idea中。运行结果,可以正常吃到蛇了。
初步的贪吃蛇游戏就做成功了。
升级改进
给了改进建议思路。改~ 输入:
再添加计分系统,显示玩家的得分列表。
把生成的代码复制到idea中运行;
玩两把。
得分列表有了,但感觉没啥特点。再加点需求 输入:
得分列表按分数降序,每个得分旁边增加一列:游戏结束时间。
代码复制到idea中。运行。再玩两把。嗯,效果可以。
提供源码
有需要自取。ScoreManager.java - 管理分数的类
import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.Date;import java.util.List;public class ScoreManager { private List scores; public ScoreManager() { scores = new ArrayList(); } public void addScore(int score) { scores.add(new ScoreEntry(score, new Date())); // 按分数降序排列 Collections.sort(scores, new Comparator() { @Override public int compare(ScoreEntry s1, ScoreEntry s2) { return Integer.compare(s2.getScore(), s1.getScore()); } }); } public List getScores() { return scores; } public static class ScoreEntry { private int score; private Date date; public ScoreEntry(int score, Date date) { this.score = score; this.date = date; } public int getScore() { return score; } public String getDate() { SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\"); return sdf.format(date); } }}
SnakeGame.java - 主类
import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class SnakeGame extends JFrame { private GamePanel gamePanel; private JButton startButton; private JButton pauseButton; private JButton scoreButton; private JLabel scoreLabel; private ScoreManager scoreManager; public SnakeGame() { setTitle(\"贪吃蛇游戏\"); setSize(600, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); scoreManager = new ScoreManager(); gamePanel = new GamePanel(scoreManager); startButton = new JButton(\"开始\"); pauseButton = new JButton(\"暂停\"); scoreButton = new JButton(\"显示得分\"); scoreLabel = new JLabel(\"得分: 0\"); // 开始按钮的功能:开始游戏 startButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { gamePanel.startGame(); gamePanel.requestFocusInWindow(); // 使游戏面板获得键盘焦点 } }); // 暂停按钮的功能:暂停游戏 pauseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { gamePanel.pauseGame(); } }); // 显示得分按钮的功能:显示玩家得分列表 scoreButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showScoreList(); } }); // 控制面板包含开始、暂停按钮和得分显示 JPanel controlPanel = new JPanel(); controlPanel.add(startButton); controlPanel.add(pauseButton); controlPanel.add(scoreButton); controlPanel.add(scoreLabel); add(gamePanel, BorderLayout.CENTER); add(controlPanel, BorderLayout.SOUTH); // 注册游戏面板的得分更新监听器 gamePanel.setScoreListener(new GamePanel.ScoreListener() { @Override public void scoreUpdated(int score) { scoreLabel.setText(\"得分: \" + score); } }); } // 显示得分列表 private void showScoreList() { StringBuilder scoresText = new StringBuilder(\"玩家得分列表:\\n\"); for (ScoreManager.ScoreEntry scoreEntry : scoreManager.getScores()) { scoresText.append(\"得分: \").append(scoreEntry.getScore()) .append(\" 时间: \").append(scoreEntry.getDate()).append(\"\\n\"); } JOptionPane.showMessageDialog(this, scoresText.toString(), \"得分列表\", JOptionPane.INFORMATION_MESSAGE); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { SnakeGame game = new SnakeGame(); game.setVisible(true); } }); }}
GamePanel.java - 游戏面板类
import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.util.Random;public class GamePanel extends JPanel implements ActionListener { private final int TILE_SIZE = 20; // 每个格子的大小 private final int WIDTH = 600; // 游戏面板的宽度 private final int HEIGHT = 600; // 游戏面板的高度 private final int ALL_TILES = (WIDTH * HEIGHT) / (TILE_SIZE * TILE_SIZE); // 总格子数 private final int[] x = new int[ALL_TILES]; // 贪吃蛇的x坐标 private final int[] y = new int[ALL_TILES]; // 贪吃蛇的y坐标 private int snakeLength; // 贪吃蛇的长度 private int foodX; // 食物的x坐标 private int foodY; // 食物的y坐标 private int score; // 玩家得分 private boolean running = false; // 游戏是否在进行中 private boolean paused = false; // 游戏是否暂停 private Timer timer; // 定时器控制游戏速度 private char direction = \'R\'; // 贪吃蛇的初始方向 private ScoreListener scoreListener; private ScoreManager scoreManager; public GamePanel(ScoreManager scoreManager) { this.scoreManager = scoreManager; setBackground(Color.BLACK); setFocusable(true); setPreferredSize(new Dimension(WIDTH, HEIGHT)); addKeyListener(new SnakeKeyAdapter()); initGame(); } public void setScoreListener(ScoreListener listener) { this.scoreListener = listener; } // 初始化游戏状态 private void initGame() { snakeLength = 3; for (int i = 0; i < snakeLength; i++) { x[i] = 100 - i * TILE_SIZE; y[i] = 100; } placeFood(); score = 0; if (scoreListener != null) { scoreListener.scoreUpdated(score); } timer = new Timer(140, this); } // 开始游戏 public void startGame() { if (!running) { running = true; paused = false; initGame(); // 重新初始化游戏状态 timer.start(); } else if (paused) { paused = false; timer.start(); } } // 暂停游戏 public void pauseGame() { if (running) { paused = true; timer.stop(); } } // 绘制游戏内容 @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (running) { draw(g); } else { showGameOver(g); } } // 绘制贪吃蛇和食物 private void draw(Graphics g) { g.setColor(Color.RED); g.fillRect(foodX, foodY, TILE_SIZE, TILE_SIZE); for (int i = 0; i 0; i--) { x[i] = x[(i - 1)]; y[i] = y[(i - 1)]; } switch (direction) { case \'U\': y[0] -= TILE_SIZE; break; case \'D\': y[0] += TILE_SIZE; break; case \'L\': x[0] -= TILE_SIZE; break; case \'R\': x[0] += TILE_SIZE; break; } } // 检查贪吃蛇是否碰到自己或边界 private void checkCollision() { for (int i = snakeLength; i > 0; i--) { if ((x[0] == x[i]) && (y[0] == y[i])) { running = false; } } if (x[0] = WIDTH || y[0] = HEIGHT) { running = false; } if (!running) { timer.stop(); } } // 随机放置食物,并确保食物不与蛇重叠 private void placeFood() { boolean valid; do { valid = true; int r = (int) (Math.random() * (WIDTH / TILE_SIZE)); foodX = ((r * TILE_SIZE)); r = (int) (Math.random() * (HEIGHT / TILE_SIZE)); foodY = ((r * TILE_SIZE)); for (int i = 0; i < snakeLength; i++) { if (x[i] == foodX && y[i] == foodY) { valid = false; break; } } } while (!valid); } // 每次定时器触发时调用 @Override public void actionPerformed(ActionEvent e) { if (running && !paused) { checkFoodCollision(); checkCollision(); move(); } repaint(); } // 键盘事件处理,控制贪吃蛇的方向和重新开始游戏 private class SnakeKeyAdapter extends KeyAdapter { @Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if (key == KeyEvent.VK_SPACE && !running) { startGame(); } if ((key == KeyEvent.VK_LEFT) && (direction != \'R\')) { direction = \'L\'; } if ((key == KeyEvent.VK_RIGHT) && (direction != \'L\')) { direction = \'R\'; } if ((key == KeyEvent.VK_UP) && (direction != \'D\')) { direction = \'U\'; } if ((key == KeyEvent.VK_DOWN) && (direction != \'U\')) { direction = \'D\'; } } } // 定义得分监听器接口 public interface ScoreListener { void scoreUpdated(int score); }}
三、感受
好用的功能太多太多,我就不在这个一一列举了,有兴趣的可以自行尝试。