Programs that are not text-based

From Esolang
Jump to navigation Jump to search

The text-based program is most basic program. However, we always uses the graphic-based program, and text-based program is not too useful(sometimes useless).

Here are some example for these program which is non-text-based.

Python TicTacToe

Note that the AI is too stupid.

import random
import tkinter as tk
from tkinter import messagebox


def draw_grid(canvas):
    # 画外边框线
    canvas.create_line(2, 2, 300, 2, width=2)  # 上
    canvas.create_line(2, 2, 2, 300, width=2)  # 左
    canvas.create_line(2, 300, 300, 300, width=2)  # 下
    canvas.create_line(300, 2, 300, 300, width=2)  # 右
    # 画横线
    canvas.create_line(100, 0, 100, 300)
    canvas.create_line(200, 0, 200, 300)
    # 画竖线
    canvas.create_line(0, 100, 300, 100)
    canvas.create_line(0, 200, 300, 200)

    num = 1
    for i in range(3):
        for j in range(3):
            y = i * 100 + 50
            x = j * 100 + 50
            canvas.create_text(x, y, text=str(num), font=("Arial", 24))

            num += 1


def on_click():
    global board
    global step
    position = e1.get()

    if position.isdigit() and 1 <= int(position) <= 9:
        number = int(position)
        index = number - 1
        if board[index] == ' ':
            board[index] = 'X'
            x = ((int(position) - 1) % 3) * 100 + 50
            y = ((int(position) - 1) // 3) * 100 + 50
            canvas.create_line(x - 20, y - 20, x + 20, y + 20, fill='black', width=2)
            canvas.create_line(x + 20, y - 20, x - 20, y + 20, fill='black', width=2)
            step += 1
            iswins()
            if not gameover:
                ai_move()
        else:
            messagebox.showerror("Error", "The tile has been dropped, please select an empty tile")



    

def ai_move():
    global board, foot
    index = random.randint(0, 8)

    while board[index] != ' ':
        index = random.randint(0, 8)

    x = ((index) % 3) * 100 + 50
    y = ((index) // 3) * 100 + 50

    canvas.create_oval(x - 20, y - 20, x + 20, y + 20, fill='red')
    board[index] = 'O'
    foot += 1
    iswins()


def problem():
    try:
        input_value = int(e1.get())
        if input_value < 1 or input_value > 9:
            messagebox.showerror("Error", "Please enter a number between 1 and 9")
        else:
            print("Valid input")
    except ValueError:
        messagebox.showerror("Error", "Please enter a valid number")

    on_click()


def iswins():
    global gameover,step
    wins = [[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]]
    for w in wins:
        if (board[w[0]]!=" " and board[w[0]]==board[w[1]]==board[w[2]]):
            gameover = True
            messagebox.showinfo(title="Output",message="Winner is "+board[w[0]])
            return
    if step>5:
        gameover = True
        messagebox.showinfo(title="Output",message="It is draw")
    return

def again():
    global board, step, gameover
    board = [' '] * 9
    step = 0
    gameover = False
    canvas.delete('all')
    draw_grid(canvas)



def main():
    root = tk.Tk()
    root.title("Tic Tac Toe")
    root.geometry("500x600")

    lb1 = tk.Label(root, text='Input the piece that drop at where(1~9):')
    lb1.place(x=150, y=350)
    global e1
    e1 = tk.Entry(root, bd=5, width=20)
    e1.place(x=150, y=380)
    button1 = tk.Button(root, text="Press to drop", width=10, height=2, fg='black', command=problem)
    button1.place(x=180, y=420)
    button2 = tk.Button(root, text="Restart", width=10, height=2, fg='black', command=again)
    button2.place(x=180, y=480)

    global canvas
    canvas = tk.Canvas(root, width=350, height=350,)
    canvas.pack()

    draw_grid(canvas)

    root.mainloop()

if __name__ == "__main__":
    board = [' '] * 9
    gameover = False
    step = 0

    foot =0
    main()

C++ Sandtrix

Download at here: https://www.luogu.com.cn/team/38157#file

Note that the website is in the Mainland of China. Find 新俄罗斯方块1.2.zip, Click the download sign, and then you can get the source code.

Categories