楼主: 三川啦啦啦
1636 1

[程序分享] 俄罗斯方块的程序 [推广有奖]

  • 0关注
  • 0粉丝

小学生

21%

还不是VIP/贵宾

-

威望
0
论坛币
40 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
140 点
帖子
1
精华
0
在线时间
10 小时
注册时间
2020-5-1
最后登录
2023-9-27

楼主
三川啦啦啦 发表于 2020-8-18 17:35:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
写了俄罗斯方块的程序,想使用getGraphicsEvent等函数键入积木移动、变换的指令,但是程序总是陷入空白的循环中,任何键盘指令没有用。希望大佬能指出其中的错误。我会发红包作为感谢!

Tetris <- function(diff = 1)    #diff 难度(下落时间间隔)
{
    par(mai=rep(0,4),oma=rep(0,4))
    plot(0, 0, type = "n", xlim = c(0.5,10.5), ylim = c(1,20),
         xlab = "", ylab = "")
    draw <- function(z)points(z, pch = 15 , cex = 4, col = "#1A4D80")
    clean <- function(z)points(z, pch = 15 , cex = 4, col = "white")

    ##积木
    Smashboy = c(5+20i,6+20i,5+19i,6+19i)    #方块
    Hero = c(5+20i,4+20i,6+20i,7+20i)    #长条
    Teewee = c(5+19i,5+20i,4+19i,6+19i)    #小T
    Ricky = c(4+20i,5+19i,4+19i,6+19i)    #右手L
    Licky = c(4+19i,6+20i,5+19i,6+19i)    #左手L
    Cleveland = c(5+20i,4+20i,5+19i,6+19i)    #小Z
    Rhodeland = c(5+20i,6+20i,5+19i,4+19i)    #反Z

    block = list(Smashboy, Hero, Teewee, Ricky, Licky, Cleveland, Rhodeland)

    #旋转变换
    spin <-function(A) A = (A-A[1])*1i + A[1]
    #左平移
    Lmove <- function(A) A = A - 1
    #右平移
    Lmove <- function(A) A = A + 1
    #下平移
    Dmove <- function(A) A = A - 1i
    #随机出现积木
    toss <- function()floor(runif(1, 1, 8))
    #距离函数
    dist <- function(A)
    {
        I = Im(A); R = Re(A)
        J = c() ; K = c()
        for(i in (min(R):max(R)))
        {
            J = c(J, min(I[which(R == i)]))
            K = c(K, max(Im(Bmat[,i])))
        }      
        min(J - K)
    }
    #积木记录表
    Bmat <- matrix(rep(0,200),20)
    #积木高度函数
    height <- function(Bmat)
    {
        h = which(Bmat!=0)%%20
        if(any(h == 0))h[which(h == 0)] = 20
        22 - min(h)
    }
    keydown <- function(key)
    {
        if (key == "right") A = Lmove(A)
        if (key == "left")  A = Rmove(A)
        if (key == "down")  A = Dmove(A)
        if (key == "up")    A = spin(A)
        draw(A)
    }
    H = 1
    while(H < 21)
    {
        A = block[[toss()]]
        L = dist(A)
        while(L > 1.1)
        {
            draw(A)
            Sys.sleep(diff)
            clean(A)
            getGraphicsEvent(onKeybd = keydown)
            L = L - 1
            A = Dmove(A)
        }
        draw(A)
        for(i in A)Bmat[21 - Im(i),Re(i)] = i
        H = height(Bmat)
    }
}
Tetris(0.2)


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:俄罗斯方块 俄罗斯 Graphics GRAPHIC Seven

已有 2 人评分经验 论坛币 收起 理由
cheetahfly + 30 精彩帖子
dxystata + 100 + 10 鼓励积极发帖讨论

总评分: 经验 + 100  论坛币 + 40   查看全部评分

沙发
17309125226 发表于 2020-8-18 19:27:18 来自手机
三川啦啦啦 发表于 2020-8-18 17:35
写了俄罗斯方块的程序,想使用getGraphicsEvent等函数键入积木移动、变换的指令,但是程序总是陷入空白的循 ...
感谢楼主分享

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-20 21:34