ChatGPT初体验,确实是里程碑了

446 阅读3分钟

本文正在参加 ✍🏻 技术视角深入 ChatGPT 征文活动

ChatGPT初体验,确实是里程碑了

ChatGPT是什么

ChatGPT最近火爆全世界,又掀起了一股人工智能的浪潮。为什么说又呢?因为上一次人工智能掀起这么大讨论热潮的还是2016年3月AlphaGo在围棋上战胜世界冠军李世石。

网上关于ChatGPT的介绍多如牛毛,本人就不详细介绍了,简单一句话:ChatGPT是一个聊天机器人,能与人对话,理解对话并作出回答/解答,甚至能写程序代码!

ChatGPT对话分享

  • 写个小游戏呗!

我:编写一个扫雷游戏用python

chatgpt:这是一段python代码,用来创建一个扫雷游戏,它可以运行在pygame的环境中 代码省略,因为需要第三方依赖,作者环境暂时没有

所以我就换了一个语言,换了一种提问方式,再次让chatgpt开始他的扫雷代码编程之路

我:编写扫雷游戏代码,用java。要求带main方法,可运行,且不依赖第三方jar包。

chatgpt:这是一段Java代码,用来创建一个扫雷游戏,它包含了一个main()方法,可以被运行,不依赖于任何第三方包:(完整代码文章末尾)。

本着求真务实的态度,我把代码复制到IEDA中尝试运行了下,震惊了还真的能跑起来。其结果虽然像是蹒跚学步的婴儿的一小步,但却迈开了超越人类的步伐,我把运行结果贴上: 运行扫雷.png

  • 这个人烧不烧?

我:帮忙把下面体温数据整体成表格形式,并求最大值,最小值,平均值:12点36.5度,13点36.8度,14点37.8度,15点39度,16点38度,17点36度

chagpt: (算了我还是直接贴图吧)

体温对话.jpg
  • 括号里填什么数?

我:1,3,5,7,11,13,17,(),()。请问这两个括号填哪两个数字比较合理?为什么?

chatgpt: (还是继续贴图,无图无真相,主要是chatgpt能理解什么是括号,能理解括号里要填数,还能根据提示一步步修正答案)

质数1.jpg 质数2.jpg 质数3.jpg

tips

chatgpt训练集的数据是截至到2021年,所以你问他时间或者最近的新闻事件他可能答不对,你问他知识类的他也可能答不对。还是问一些理解,推理性质的比较好,结果会出乎你所料。

代码

import java.util.Scanner;
public class Minesweeper {

    // Constants
    private static final int BOARD_SIZE = 10;
    
    private static final int NUM_MINES = 20;
 
    // Global variables
    private int numMinesLeft;
    private boolean[][] isMine;
    private int[][] numMinesAdjacent;
    private boolean[][] revealed;
 
    public Minesweeper() {
        resetGame();
    }
 
    private void resetGame() {
        // Initialize game state
        isMine = new boolean[BOARD_SIZE][BOARD_SIZE];
        numMinesAdjacent = new int[BOARD_SIZE][BOARD_SIZE];
        revealed = new boolean[BOARD_SIZE][BOARD_SIZE];
        numMinesLeft = NUM_MINES;
 
        // Generate 20 random mines
        while (numMinesLeft > 0) {
            int row = (int)(Math.random() * BOARD_SIZE);
            int col = (int)(Math.random() * BOARD_SIZE);
            if (!isMine[row][col]) {
                isMine[row][col] = true;
                numMinesLeft--;
            }
        }
 
        // Count adjacent mines for each cell
        for (int row = 0; row < BOARD_SIZE; row++) {
            for (int col = 0; col < BOARD_SIZE; col++) {
                int count = 0;
                for (int xOffset = -1; xOffset <= 1; xOffset++) {
                    for (int yOffset = -1; yOffset <= 1; yOffset++) {
                        if (xOffset == 0 && yOffset == 0) {
                            continue;
                        }
                        int x = row + xOffset;
                        int y = col + yOffset;
                        if (x >= 0 && x < BOARD_SIZE && y >= 0 && y < BOARD_SIZE) {
                            if (isMine[x][y]) {
                                count++;
                            }
                        }
                    }
                }
                numMinesAdjacent[row][col] = count;
            }
        }
    }
 
    // Main play loop
    public void play(){
        Scanner scanner = new Scanner(System.in);
        while(true){
            // Display the board
            printBoard();
 
            // Read user input
            System.out.print("Enter row: ");
            int row = scanner.nextInt();
            System.out.print("Enter column: ");
            int col = scanner.nextInt();
            System.out.println();
 
            // Check for valid input
            if (row < 0 || row >= BOARD_SIZE || col < 0 || col >= BOARD_SIZE){
                System.out.println("Invalid input.");
                continue;
            }
 
            // Reveal cell
            if (revealed[row][col]){
                System.out.println("Cell already revealed.");
                continue;
            }
 
            revealed[row][col] = true;
            if (isMine[row][col]){
                // Game over
                System.out.println("BOOM! Game over.");
                break;
            }
        }
    }
 
    // Method to print board
    private void printBoard(){
        System.out.print(" |");
        for (int col = 0; col < BOARD_SIZE; col++){
            System.out.print(col+"|");
        }
        System.out.println();
        for (int row = 0; row < BOARD_SIZE; row++){
            System.out.print(row+"|");
            for (int col = 0; col < BOARD_SIZE; col++){
                if (isMine[row][col]){
                    System.out.print("X|");
                } else if (revealed[row][col]){
                    System.out.print(numMinesAdjacent[row][col]+"|");
                } else {
                    System.out.print(" |");
                }
            }
            System.out.println();
        }
    }
 
    // Main method
    public static void main(String[] args) {
        Minesweeper minesweeper = new Minesweeper();
        minesweeper.play();
    }
}