社区讨论

《你能AK IOI吗》python实现

灌水区参与者 9已保存回复 15

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
14 条
当前快照
1 份
快照标识符
@m60riz2v
此快照首次捕获于
2025/01/17 20:55
去年
此快照最后确认于
2025/11/04 23:13
4 个月前
查看原帖
啊啊啊终于写出来了!!!(用时5小时)
用了pgzrun和random这俩模块,需要IDLE,请复制到IDLE再运行。
PYTHON
import pgzrun
import random

WIDTH = 450
HEIGHT = 550

score = 0
flag2 = 0

r = [[2,0,0,0],
     [0,0,0,0],
     [2,0,0,0],
     [0,0,0,0]]

r_c = [[(158,149,140),(158,149,140),(158,149,140),(158,149,140)],
       [(158,149,140),(158,149,140),(158,149,140),(158,149,140)],
       [(158,149,140),(158,149,140),(158,149,140),(158,149,140)],
       [(158,149,140),(158,149,140),(158,149,140),(158,149,140)]]

for i in range(4):
        for j in range(4):
            if r[i][j] == 0:
                r_c[i][j] = (158,149,140)
            elif r[i][j] == 2:
                r_c[i][j] = (235,235,0)
            elif r[i][j] == 4:
                r_c[i][j] = (173,36,255)
            elif r[i][j] == 8:
                r_c[i][j] = (0,0,0)
            elif r[i][j] == 16:
                r_c[i][j] = (0,0,82)
            elif r[i][j] == 32:
                r_c[i][j] = (0,0,160)
            elif r[i][j] == 64:
                r_c[i][j] = (0,0,200)
            elif r[i][j] == 128:
                r_c[i][j] = (235,0,0)
            elif r[i][j] == 256:
                r_c[i][j] = (180,180,180)
            elif r[i][j] == 512:
                r_c[i][j] = (0,172,139)
            elif r[i][j] == 1024:
                r_c[i][j] = (0,165,0)
            elif r[i][j] == 2048:
                r_c[i][j] = (0,211,255)

def findout(a):
    if a == "2":
        return "CE"
    if a == "4":
        return "RE"
    if a == "8":
        return "MLE"
    if a == "16":
        return "TLE"
    if a == "32":
        return "OLE"
    if a == "64":
        return "ILE"
    if a == "128":
        return "WA"
    if a == "256":
        return "UKE"
    if a == "512":
        return "PC"
    if a == "1024":
        return "AC"
    if a == "2048":
        return "AK"
    
def draw():
    global flag2
    screen.draw.filled_rect(Rect((0, 0), (450, 550)), (146,135,125))
    for i in range(4):
        for j in range(4):
            screen.draw.filled_rect(Rect((10+i*110, 110+j*110), (100, 100)), r_c[j][i])
            if r[j][i] != 0:
                screen.draw.text(findout(str(r[j][i])),center = (60+i*110,160+j*110),fontsize = 40,color = 'white' )
    screen.draw.text('Score:'+str(score),center = (225,50),fontsize = 30,color = 'black' )
    if flag2 == 1:
        screen.draw.filled_rect(Rect((0, 0), (450, 550)), (0,255,0))
        screen.draw.text('GAME OVER',center = (225,200),fontsize = 50,color = 'black')
        screen.draw.text('得分:'+str(score),center = (225,290),fontsize = 30,color = 'black')
        screen.draw.text('点击屏幕返回',center = (225,340),fontsize = 30,color = 'black')

def on_key_down(key):
    global score,r,r_c,flag2
    r_list = []
    r_a = [2,2,2,2,2,2,2,2,2,4]
    for i in range(3):
        if key == keys.LEFT:
            for i in range(4):
                for j in range(3):
                    if r[i][j] == 0:
                        r[i][j] = r[i][j+1]
                        r[i][j+1] = 0
        elif key == keys.RIGHT:
            for i in range(4):
                for j in range(3):
                    if r[i][3-j] == 0:
                        r[i][3-j] = r[i][2-j]
                        r[i][2-j] = 0
        elif key == keys.UP:
            for i in range(3):
                for j in range(4):
                    if r[i][j] == 0:
                        r[i][j] = r[i+1][j]
                        r[i+1][j] = 0
        elif key == keys.DOWN:
            for i in range(3):
                for j in range(4):
                    if r[3-i][j] == 0:
                        r[3-i][j] = r[2-i][j]
                        r[2-i][j] = 0
    if key == keys.LEFT:
        for i in range(4):
            for j in range(3):
                if r[i][3-j] == r[i][2-j] and r[i][3-j] != 0:
                    r[i][2-j] = r[i][3-j] + r[i][2-j]
                    r[i][3-j] = 0
                    score += r[i][2-j]
                    break
    elif key == keys.RIGHT:
        for i in range(4):
            for j in range(3):
                if r[i][j] == r[i][j+1] and r[i][j] != 0:
                    r[i][j+1] = r[i][j] + r[i][j+1]
                    r[i][j] = 0
                    score += r[i][j+1]
                    break
    elif key == keys.UP:
        for i in range(3):
            for j in range(4):
                if r[3-i][j] == r[2-i][j] and r[3-i][j] != 0:
                    r[2-i][j] = r[3-i][j] + r[2-i][j]
                    r[3-i][j] = 0
                    score += r[2-i][j]
                    break
    elif key == keys.DOWN:
        for i in range(3):
            for j in range(4):
                if r[i][j] == r[i+1][j] and r[i][j] != 0:
                    r[i+1][j] = r[i][j] + r[i+1][j]
                    r[i][j] = 0
                    score += r[i+1][j]
                    break
    for i in range(3):
        if key == keys.LEFT:
            for i in range(4):
                for j in range(3):
                    if r[i][j] == 0:
                        r[i][j] = r[i][j+1]
                        r[i][j+1] = 0
        elif key == keys.RIGHT:
            for i in range(4):
                for j in range(3):
                    if r[i][3-j] == 0:
                        r[i][3-j] = r[i][2-j]
                        r[i][2-j] = 0
        elif key == keys.UP:
            for i in range(3):
                for j in range(4):
                    if r[i][j] == 0:
                        r[i][j] = r[i+1][j]
                        r[i+1][j] = 0
        elif key == keys.DOWN:
            for i in range(3):
                for j in range(4):
                    if r[3-i][j] == 0:
                        r[3-i][j] = r[2-i][j]
                        r[2-i][j] = 0
    for i in range(4):
        for j in range(4):
            if r[i][j] == 0:
                r_list.append([i,j])
    if r_list != []:
        a = random.choice(r_list)
        b = random.choice(r_a)
        r[a[0]][a[1]] = b
    else:
        flag2 = 1
        for i in range(4):
            for j in range(3):
                if r[i][j] == r[i][j+1]:
                    flag2 = 0
        for i in range(3):
            for j in range(4):
                if r[i][j] == r[i+1][j]:
                    flag2 = 0
    for i in range(4):
        for j in range(4):
            if r[i][j] == 0:
                r_c[i][j] = (158,149,140)
            elif r[i][j] == 2:
                r_c[i][j] = (235,235,0)
            elif r[i][j] == 4:
                r_c[i][j] = (173,36,255)
            elif r[i][j] == 8:
                r_c[i][j] = (0,0,0)
            elif r[i][j] == 16:
                r_c[i][j] = (0,0,82)
            elif r[i][j] == 32:
                r_c[i][j] = (0,0,160)
            elif r[i][j] == 64:
                r_c[i][j] = (0,0,200)
            elif r[i][j] == 128:
                r_c[i][j] = (235,0,0)
            elif r[i][j] == 256:
                r_c[i][j] = (180,180,180)
            elif r[i][j] == 512:
                r_c[i][j] = (0,172,139)
            elif r[i][j] == 1024:
                r_c[i][j] = (0,165,0)
            elif r[i][j] == 2048:
                r_c[i][j] = (0,211,255)

def on_mouse_down():
    global flag2,score,r,r_c
    if flag2 == 1:
        flag2 = 0
        score = 0
        r = [[2,0,0,0],
            [0,0,0,0],
            [2,0,0,0],
            [0,0,0,0]]
        r_c = [[(158,149,140),(158,149,140),(158,149,140),(158,149,140)],
            [(158,149,140),(158,149,140),(158,149,140),(158,149,140)],
            [(158,149,140),(158,149,140),(158,149,140),(158,149,140)],
            [(158,149,140),(158,149,140),(158,149,140),(158,149,140)]]
        for i in range(4):
                for j in range(4):
                    if r[i][j] == 0:
                        r_c[i][j] = (158,149,140)
                    elif r[i][j] == 2:
                        r_c[i][j] = (238,228,218)
                    elif r[i][j] == 4:
                        r_c[i][j] = (173,36,255)
                    elif r[i][j] == 8:
                        r_c[i][j] = (242,177,121)
                    elif r[i][j] == 16:
                        r_c[i][j] = (245,149,99)
                    elif r[i][j] == 32:
                        r_c[i][j] = (246,124,95)
                    elif r[i][j] == 64:
                        r_c[i][j] = (246,94,59)
                    elif r[i][j] == 128:
                        r_c[i][j] = (237,207,114)
                    elif r[i][j] == 256:
                        r_c[i][j] = (237,207,114)
                    elif r[i][j] == 512:
                        r_c[i][j] = (237,207,114)
                    elif r[i][j] == 1024:
                        r_c[i][j] = (237,207,114)
                    elif r[i][j] == 2048:
                        r_c[i][j] = (237,207,114)
mobile_key_type5()
pgzrun.go()
都看到这里了,来发表个评论吧

回复

15 条回复,欢迎继续交流。

正在加载回复...