创建一个西蒙克隆![关闭]


18

场景:编程时,您会突然怀念80年代和俗气的游戏。

要求:为游戏Simon制作一个GUI程序(文本可能不起作用)。输入可以单击,也可以按一个键。您应将屏幕分为4个区域:黄色,蓝色,红色,绿色。游戏开始时,随机颜色会亮起,然后将其激活。然后,两个指示灯点亮,一个接一个,接着您需要按顺序激活它们,依此类推。当您按错误的颜色时,游戏结束。

奖金:

如果包含声音,则为-100(按每个区域时以及游戏显示颜色时播放的音符不同)

-25(如果您包括得分计数器)。


13
GUI和代码高尔夫球通常不能一起使用。
user80551 2014年

3
这应该在Minecraft中可行。如果有人已经有我不会感到惊讶。但不知道该如何提交……
Kninnug 2014年

@Kninnug块数量*每个块的字节数;)
Liam McInroy 2014年

@Liam McInroy AFAIK一个块是2个字节的块ID,还有4个字节用于存储其在世界上的位置。
帕维尔

Answers:


12

318 297 281 273 268 244 240-125 = 115

这主要是对“文本可能不起作用”的回应;下面的基于文本的bash脚本运行在精Konsolegnome-terminal我的Ubuntu 14.04的机器上等等。要创建颜色区域,它设置文本背景颜色。实际上,添加文本可使色盲玩家更容易访问游戏。为了使游戏更加易于使用,它会读取玩家需要按的字符(假定espeak已安装)。它还假定唯一的文件匹配/d*/ur*//dev/urandom。为了使颜色区域的大小不重要,您可能希望将文本大小设置得很大。同样,如果您希望颜色区域为象限,则必须在两个字符宽的终端中运行它。

要播放,请按y,r,g或b。

cat <<"EOF"|sed s/E/`echo -e '\E'`/>simon_golf.sh;bash simon_golf.sh;wc simon_golf.sh
d(){ echo Ecx1r09mRx2g10mGx3y11mYx4b14mBx0m$s|sed s/.$1"//
s/[rgyb]..//g
s/x/E[48;5;/g";};x(){ d $c;espeak $c;d j;};l(){
for c in $o;{ eval $1;x;};};f(){ o=$o\ `tr -dc yrgb</d*/ur*|head -c1`
l;l 'read -n1 i;[ $c = $i ]||exit;let s++';f;};f
EOF

此解决方案包含两个不可打印的ESC字符。尽管这些ESC字符显示在预览中,但是它们似乎在提交后被删除,因此上面的代码是一个包装器,用于生成并运行golfed simon_golf.sh

另请参见原始的非高尔夫版本和可播放性更高的256字节版本

下面的屏幕截图是当黄灯亮且玩家的分数是7时的屏幕。右侧的屏幕截图已被降低饱和度以模拟色盲。

屏幕截图黑与白


对于标准高尔夫来说太大了……
John Dvorak 2014年

3
真正。我在这里更多地是因为“编程难题”而不是“代码高尔夫”。
gmatht 2014年

我现在打了些高尔夫球。
gmatht 2014年

24

从零开始,1604 – 125 = 1479

我在这里是为了娱乐,而不是高尔夫。

编辑:基于社区共识的更新评分方法。

主程序:

主要

个别精灵:

精灵

这是带有数字的精灵0。除数量外,其他精灵具有相同的脚本。

在线玩。

用于字节计数的代码:(使用代码段隐藏代码)

注意:使用暂存器生成器自动生成的代码,修改为生成器无法正确处理十进制数字(将0.3设为0)。

屏幕截图:

屏幕截图

注意:请勿在0.3秒内按下两个按钮。


哈,太酷了。不过,在回答正确之后稍作停顿,还是会有一些祝贺的声音。听起来我的最后一步是模式的一部分。另外,我会比输入上限更慢地播放声音,因为节奏和音调匹配是人们(至少是我自己)的演奏方式……不过,我还是喜欢。+1
krs013 2014年

1
刮?先生 同样,字节数imo应该是SB2的总大小。
cjfaure 2014年

1
@Trimsty这将是126833个字节(包括wav声音文件等),这就是为什么我说“我在这里是为了娱乐,而不是高尔夫”。
user12205 2014年

根据我在这里建议的评分,分数是60(27个块,常量20个字符/数字,8个运算符,5个变量使用)。有了奖金,您可以获得-65。
ugoren 2014年

@ugoren这实际上只是部分答案。有4个子画面,仅显示了一个子画面的脚本,因为其他子画面除编号外几乎都具有相同的脚本。我将根据您的得分来更新答案。谢谢。
user12205 2014年

3

Mathematica,409-125 = 284

k = 2;
p = Tuples[{0, 1}, 2];
f[c_, p_] := 
 EventHandler[{c, Rectangle[p]}, 
  "MouseClicked" :> (AppendTo[x, p]; Beep[]; g)]
h[R_] := (i = 1; 
  RunScheduledTask[
   H = If[OddQ@i, 
     Beep[]; {EdgeForm[{Thickness[0.02], Black}], FaceForm[], 
      Rectangle@R[[Ceiling[i/2]]]}, {}]; i++, {.3, 2 Length@R}])
s := (m = 0; x = {}; h[R = RandomChoice[p, k]];)
g := (m++; If[Take[R, m] != x, k = 2; s, If[m == k, k++; s]])
Dynamic@Graphics[{MapThread[f, {{Yellow, Red, Blue, Green}, p}], H}, 
  PlotLabel -> k]
s

在此处输入图片说明


2

Windows PowerShell(CLI),272-100-25 = 147

$d={param($c)cls;sleep -m 99;'R','Y','Blu','Gre'|
%{Write-Host '#' -N -F "$(if($i%4-ne $c){'Dark'})$_";
$i++}};$b={param($c)&$d $c;[console]::Beep(($c+1)*99,700);&$d};
$m=@();$s=0;for(){$m+=0..3|Get-Random;$m|%{&$b $_};$m|%{
if((read-host)-ne $_){$s;exit}&$b $_};$s++;sleep 1}

我在这里添加了换行符以避免侧滚动,但是它作为一行使用,因此字符数没有换行符。

屏幕截图: 游戏画面

玩:

  • 打开PowerShell ISE(v3),将脚本粘贴到文本编辑器中,按F5键运行。
  • 游戏将点亮一种颜色,播放声音,然后等待输入
  • 按数字(0 =红色,1 =黄色,2 =蓝色,3 =绿色),然后按Enter。
  • 如果您输入错了,它将打印分数并退出。(注意,它可能会退出您的控制台)。
  • 如果您是正确的,则需要注意两个事项。
  • 播放序列时,必须在每个音符之间按Enter。

注释:

  • “将屏幕分为4个区域”-您没有说过它们必须是四分之一,所以不是。
  • 很难在蓝色背景上看到蓝色的光,但是确实如此。
  • 请在PowerShell ISE中运行-在正常提示下,“ DarkYellow”显示为白色。
  • 可以说,您可以通过删除一些时间(仍然使游戏可玩)并解释规则“声音(在按下时以及游戏显示颜色时播放的音符)”来表示再打28个字符,意思是“他们可以都是一样的声音-默认错误DING”,但我认为这与它的精神背道而驰。

0

ZXBasic:422-100-25 = 297

这绝对算是80年代的怀旧气息...

ZXBasic使用FreeBASIC类型命令和ZX Spectrum BASIC的组合来允许循环和重复,然后将其转换为TZX格式以加载到Spectrum模拟器中。

此版本更改了边框(尽管屏幕上的图例显示了要按下的键)。它具有与原始Simon游戏相同的音符(http://en.wikipedia.org/wiki/Simon_%28game%29)。

d=0.5:s=0:l=1:t=1:n$="4261":dim m(4)=>{-8,9,1,4}
border 7
while l>0
 cls:a$="":print at 1,1;"Level: ";t;at 2,1;"Score:";s::for i=1 to 4:print at 0,i;paper val(n$(i));ink 0;i:next
 for i=1 to t
  c=1+int(rnd*4)
  border val(n$(c)):beep d,m(c):border 7
  a$=a$+str(c)
 next
 print at 10,1;"your turn"
 p$="":i=1
 do
  pause 100:k$=inkey:print at 6,i;k$
  if k$=a$(i) then s=s+1:print at 2,7;s:beep d,m(val(k$)):i=i+1
  else l=l-1:i=t+1:print "bad luck!"
  end if
 loop until i>t 
 t=t+1:pause 25
end while

最好成绩 进行中


0

HTML5和Javascript,1118-100-25 = 993字节

在此处输入图片说明

HTML + Js版本太肿了。

通过Web Audio API播放声音。

音符的频率也应该是原始西蒙的音符,颜色和颜色位置。

这里有一个在线演示:http : //www.dantonag.it/miniSimon.html。在兼容Web Audio的浏览器中运行(至少Chrome和Firefox,IE不支持,AFIAK)。

<html><script>
var hc=["#0f0","red","#ff3","blue"],lc=["#090","#930","#cc0","#33c"],nt=[391,329,261,195],ln=[],qpos=0,pm=0,x,ct=new AudioContext;function ps(a,d){var b=ct.createOscillator();b.frequency.value=d;b.connect(ct.destination);var c=ct.createGain();b.connect(c);c.connect(ct.destination);c.gain.value=-.5;x[a].style.backgroundColor=hc[a];b.start(0);setTimeout(function(a,b){a.stop(0);x[b].style.backgroundColor=lc[b]},500,b,a)}
function w(a){2==pm&&(a!=ln[qpos]?(pm=3,document.getElementsByTagName("span")[0].innerHTML="game over!",ps(a,156)):(qpos++,ps(a,nt[a]),qpos>=ln.length&&(pm=qpos=0)))}function ml(){if(0==pm)document.getElementsByTagName("div")[0].innerHTML=ln.length,ln.push(Math.floor(4*Math.random())),pm=1;else if(1==pm){var a=ln[qpos];qpos<ln.length?(ps(a,nt[a]),qpos++):(qpos=0,pm=2)}setTimeout(ml,500)}window.onload=function(){setTimeout(ml,1);x=document.getElementsByTagName("td")};</script><div>0</div><table cellpadding=40><tr><td bgcolor=#090 onmousedown=w(0)><td bgcolor=#930 onmousedown=w(1)><tr><td bgcolor=#cc0 onmousedown=w(2)><td bgcolor=#33c onmousedown=w(3)></table><span></span>

我的战绩是15(我在这场比赛中表现很差)。你的是啥呢?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.