#!/usr/bin/env ruby #-*- coding:utf-8 -*- require 'io/console' require 'csv' def pacman firld = CSV.read("course1.csv") stage1 = { "0" => "\e[37m・", "1" => "\e[34m■", "2" => " ", "3" => "\e[33m●", "4" => "\e[31m●", "5" => "\e[33m○", "6" => "\e[36m●" } stage2 = { "0" => "\e[37m・", "1" => "\e[34m##", "2" => " ", "3" => "\e[33m:D", "4" => "\e[31m●", "5" => "\e[33m○", "6" => "\e[36m●" } def makescreen(map, code) print("\e[2J\e[1;1H") map.each do |row| row.each do |column| print code[column] end puts end print("\e[m") end a=0 y=11 x=7 firld[y][x]="3" ey=5 ex=7 b=firld[ey][ex] firld[ey][ex]="4" ey1=2 ex1=7 d=firld[ey1][ex1] firld[ey1][ex1]="6" makescreen(firld, stage1) #makescreen(firld, stage2) printf("score:%d",a) while true if (key=STDIN.getch)=="\C-c" break end if key=="\e"&&STDIN.getch=="[" key=STDIN.getch end if key=="A"#↑ if firld[y-1][x]=="1" redo elsif firld[y-1][x]=="0" firld[y][x]="2" y-=1 firld[y][x]="3" a+=100 if y==-1&&x==7 y=14 end elsif firld[y-1][x]=="2" firld[y][x]="2" y-=1 firld[y][x]="3" if y==-1&&x==7 y=14 end end elsif key=="B"#↓ if firld[y+1]==nil firld[y][x]="2" y=0 firld[y][x]="3" elsif firld[y+1][x]=="1" redo elsif firld[y+1][x]=="0" firld[y][x]="2" y+=1 firld[y][x]="3" a+=100 elsif firld[y+1][x]=="2" firld[y][x]="2" y+=1 firld[y][x]="3" end elsif key=="C"#→ if firld[y][x+1]==nil firld[y][x]="2" x=0 firld[y][x]="3" elsif firld[y][x+1]=="1" redo elsif firld[y][x+1]=="0" firld[y][x]="2" x+=1 firld[y][x]="3" a+=100 elsif firld[y][x+1]=="2" firld[y][x]="2" x+=1 firld[y][x]="3" end elsif key=="D"#← if firld[y][x-1]=="1" redo elsif firld[y][x-1]=="0" firld[y][x]="2" x-=1 firld[y][x]="3" a+=100 if y==7&&x==-1 x=14 end elsif firld[y][x-1]=="2" firld[y][x]="2" x-=1 firld[y][x]="3" if y==7&&x==-1 x=14 end end end makescreen(firld, stage1) #makescreen(firld, stage2) printf("score:%d",a) c=0 e=[0,1,2,3] while true if c>1 sleep(0.5) firld[y][x]="5" makescreen(firld, stage1) #makescreen(firld, stage2) sleep(0.9) print("\e[5mgameover!") return end if firld[ey-1][ex]=="3" c+=1 redo elsif firld[ey+1]==nil elsif firld[ey+1][ex]=="3" c+=1 redo elsif firld[ey][ex+1]=="3" c+=1 redo elsif firld[ey][ex-1]=="3" c+=1 redo end srand() f=rand(e.length) enemy=e[f] if enemy==0 #↑ if firld[ey-1][ex]=="1" #壁なので進まない=何もしない e.delete_at(f) redo elsif firld[ey-1][ex]=="0" firld[ey][ex]=b ey-=1 b=firld[ey][ex] firld[ey][ex]="4" break elsif firld[ey-1][ex]=="2" firld[ey][ex]=b ey-=1 b=firld[ey][ex] firld[ey][ex]="4" break else break end elsif enemy==1 #↓ if firld[ey+1]==nil firld[ey][ex]=b ey=0 b=firld[ey][ex] firld[ey][ex]="4" break elsif firld[ey+1][ex]=="1" # e.delete_at(f) redo elsif firld[ey+1][ex]=="0" firld[ey][ex]=b ey+=1 b=firld[ey][ex] firld[ey][ex]="4" break elsif firld[ey+1][ex]=="2" firld[ey][ex]=b ey+=1 b=firld[ey][ex] firld[ey][ex]="4" break else break end elsif enemy==2 #→ if firld[ey][ex+1]==nil firld[ey][ex]=b ex=0 b=firld[ey][ex] firld[ey][ex]="4" break elsif firld[ey][ex+1]=="1" # e.delete_at(f) redo elsif firld[ey][ex+1]=="0" firld[ey][ex]=b ex+=1 b=firld[ey][ex] firld[ey][ex]="4" break elsif firld[ey][ex+1]=="2" firld[ey][ex]=b ex+=1 b=firld[ey][ex] firld[ey][ex]="4" break else break end elsif enemy==3 #← if firld[ey][ex-1]=="1" # e.delete_at(f) redo elsif firld[ey][ex-1]=="0" firld[ey][ex]=b ex-=1 b=firld[ey][ex] firld[ey][ex]="4" break elsif firld[ey][ex-1]=="2" firld[ey][ex]=b ex-=1 b=firld[ey][ex] firld[ey][ex]="4" break else break end elsif enemy==nil sleep(0.5) firld[y][x]="5" makescreen(firld, stage1) #makescreen(firld, stage2) sleep(0.9) print("\e[5mgameover!") return end end makescreen(firld, stage1) #makescreen(firld, stage2) printf("score:%d\n",a) c=0 e=[0,1,2,3] while true if c>1 sleep(0.5) firld[y][x]="5" makescreen(firld, stage1) #makescreen(firld, stage2) sleep(0.9) print("\e[5mgameover!") return end if firld[ey1-1][ex1]=="3" c+=1 redo elsif firld[ey1+1]==nil elsif firld[ey1+1][ex1]=="3" c+=1 redo elsif firld[ey1][ex1+1]=="3" c+=1 redo elsif firld[ey1][ex1-1]=="3" c+=1 redo end srand() f=rand(e.length) enemy=e[f] if enemy==0 #↑ if firld[ey1-1][ex1]=="1" #壁なので進まない=何もしない e.delete_at(f) redo elsif firld[ey1-1][ex1]=="0" firld[ey1][ex1]=d ey1-=1 d=firld[ey1][ex1] firld[ey1][ex1]="6" break elsif firld[ey1-1][ex1]=="2" firld[ey1][ex1]=d ey1-=1 d=firld[ey1][ex1] firld[ey1][ex1]="6" break else break end elsif enemy==1 #↓ if firld[ey1+1]==nil firld[ey1][ex1]=d ey1=0 d=firld[ey1][ex1] firld[ey1][ex1]="6" break elsif firld[ey1+1][ex1]=="1" # e.delete_at(f) redo elsif firld[ey1+1][ex1]=="0" firld[ey1][ex1]=d ey1+=1 d=firld[ey1][ex1] firld[ey1][ex1]="6" break elsif firld[ey1+1][ex1]=="2" firld[ey1][ex1]=d ey1+=1 d=firld[ey1][ex1] firld[ey1][ex1]="6" break else break end elsif enemy==2 #→ if firld[ey1][ex1+1]==nil firld[ey1][ex1]=d ex1=0 d=firld[ey1][ex1] firld[ey1][ex1]="6" break elsif firld[ey1][ex1+1]=="1" # e.delete_at(f) redo elsif firld[ey1][ex1+1]=="0" firld[ey1][ex1]=d ex1+=1 d=firld[ey1][ex1] firld[ey1][ex1]="6" break elsif firld[ey1][ex1+1]=="2" firld[ey1][ex1]=d ex1+=1 d=firld[ey1][ex1] firld[ey1][ex1]="6" break else break end elsif enemy==3 #← if firld[ey1][ex1-1]=="1" # e.delete_at(f) redo elsif firld[ey1][ex1-1]=="0" firld[ey1][ex1]=d ex1-=1 d=firld[ey1][ex1] firld[ey1][ex1]="6" break elsif firld[ey1][ex1-1]=="2" firld[ey1][ex1]=d ex1-=1 d=firld[ey1][ex1] firld[ey1][ex1]="6" break else break end elsif enemy==nil sleep(0.5) firld[y][x]="5" makescreen(firld, stage1) #makescreen(firld, stage2) sleep(0.9) print("\e[5mgameover!\e[m") print("enemy==nil") return end end makescreen(firld, stage1) #makescreen(firld, stage2) printf("score:%d\n",a) if a==10000 print("\e[5mgameclear!") return end end end pacman