用verilog做一个FPGA基于vga的小游戏,贪吃蛇,五子棋,乒乓球,招财猫等一系列简单小游戏

用verilog做一个FPGA基于vga的小游戏,贪吃蛇,五子棋,乒乓球,招财猫等一系列简单小游戏,第1张

楼下的。。。你做的吧。说可以在各运行,但问题是verilog本来就是用来搭建的啊。。你连楼主用的而是PCB,什么型号的世枝FPGA都不知道。。怎么能完成他要求的一个应用层的的东西了,楼主也是。。明明就是的活,要用做底层硬件的工具来做。。只能说你老太强大了。。。恐怕你没太搞清楚这有多大难度么。。不是完全不可以实现,但是你这样什么信息都没有。。真是无米之炊啊。。。起码得讲清楚,这块PCB上的显示设备是什么型号datasheet,控制用的按键的datasheet;电路板时钟频率。。本身的FPGA芯搜旦敏片型号,更要迟谈紧的是这些器件在PCB上的原理图啊

//package main

import java.awt.Color

import java.awt.event.ActionEvent

import java.awt.event.ActionListener

import java.awt.event.KeyEvent

import java.awt.event.KeyListener

import java.awt.event.WindowAdapter

import java.awt.event.WindowEvent

import java.io.BufferedReader

import java.io.FileInputStream

import java.io.FileOutputStream

import java.io.InputStreamReader

import javax.swing.ImageIcon

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JMenu

import javax.swing.JMenuBar

import javax.swing.JMenuItem

import javax.swing.JOptionPane

import javax.swing.JPanel

public class TanChiShe implements KeyListener,ActionListener{

/返察**

* @param args

*/

int max = 300//蛇长最大值

final int JianJu = 15 //设定蛇的运动网格间距(窗口最大32*28格)

byte fangXiang = 4 //控制蛇的运动方向,初始为右

int time = 500 //蛇的运动间隔时间

int jianTime = 2//吃一个减少的时间

int x,y//蛇的运闭野动坐标,按网格来算

int x2,y2//暂存蛇头的坐标

int jiFenQi = 0//积分器

boolean isRuned = false//没运行才可设级别

boolean out = false//没开始运行?

boolean run = false//暂停运行

String JiBie = "中级"

JFrame f = new JFrame("贪吃蛇 V1.0")

JPanel show = new JPanel()

JLabel Message = new JLabel("级别:中级蛇长:5 时间500ms 分数:00")

// JButton play = new JButton("开始")

JLabel sheTou

JLabel shiWu

JLabel sheWei[] = new JLabel[max]

static int diJi = 4//第几个下标的蛇尾要被加上

ImageIcon shang = new ImageIcon("tuPian\\isSheTouUp.png")//产生四个上下左右的蛇头图案

ImageIcon xia = new ImageIcon("tuPian\\isSheTouDown.png")

ImageIcon zhuo = new ImageIcon("tuPian\\isSheTouLeft.png")

ImageIcon you = new ImageIcon("tuPian\\isSheTouRight.png")

JMenuBar JMB = new JMenuBar()

JMenu file = new JMenu("开始游戏")

JMenuItem play = new JMenuItem(" 开始游戏 ")

JMenuItem pause = new JMenuItem(" 暂停游戏 ")

JMenu hard = new JMenu("游戏难轿世喊度")

JMenuItem gao = new JMenuItem("高级")

JMenuItem zhong = new JMenuItem("中级")

JMenuItem di = new JMenuItem("低级")

JMenu about = new JMenu(" 关于 ")

JMenuItem GF = new JMenuItem("※高分榜")

JMenuItem ZZ = new JMenuItem("关于作者")

JMenuItem YX = new JMenuItem("关于游戏")

JMenuItem QK = new JMenuItem("清空记录")

static TanChiShe tcs = new TanChiShe()

public static void main(String[] args) {

// TanChiShe tcs = new TanChiShe()

tcs.f()

}

public void f(){

f.setBounds(250,100,515,530)

f.setLayout(null)

f.setAlwaysOnTop(true)//窗口始终保持最前面

f.setBackground(new Color(0,0,0))

f.setDefaultCloseOperation(0)

f.setResizable(false)

f.setVisible(true)

// f.getContentPane().setBackground(Color.BLACK)

f.addWindowListener(new WindowAdapter(){

public void windowClosing(WindowEvent e){

System.exit(0)//退出程序

}

})

f.setJMenuBar(JMB)

JMB.add(file)

file.add(play)

file.add(pause)

JMB.add(hard)

hard.add(gao)

hard.add(zhong)

hard.add(di)

JMB.add(about)

about.add(GF)

GF.setForeground(Color.blue)

about.add(ZZ)

about.add(YX)

about.add(QK)

QK.setForeground(Color.red)

f.add(show)

show.setBounds(0,f.getHeight()-92,f.getWidth(),35)

// show.setBackground(Color.green)

// f.add(play)

// play.setBounds(240,240,80,25)

play.addActionListener(this)

pause.addActionListener(this)

gao.addActionListener(this)

zhong.addActionListener(this)

di.addActionListener(this)

GF.addActionListener(this)

ZZ.addActionListener(this)

YX.addActionListener(this)

QK.addActionListener(this)

show.add(Message)

Message.setForeground(Color.blue)

f.addKeyListener(this)

// show.addKeyListener(this)

play.addKeyListener(this)

sheChuShi()

}

public void sheChuShi(){//蛇初始化

sheTou = new JLabel(you)//用向右的图来初始蛇头

f.add(sheTou)

sheTou.setBounds(JianJu*0,JianJu*0,JianJu,JianJu)

// System.out.println("ishere")

shiWu = new JLabel("■")

f.add(shiWu)

shiWu.setBounds(10*JianJu,10*JianJu,JianJu,JianJu)

for(int i=0i<=diJii++) {

sheWei[i] = new JLabel("■")

f.add(sheWei[i])

sheWei[i].setBounds(-1*JianJu,0*JianJu,JianJu,JianJu)

}

while(true){

if(out == true){

yunXing()

break

}

try{

Thread.sleep(200)

}catch(Exception ex){

ex.printStackTrace()

}

}

}

public void sheJiaChang(){//蛇的长度增加

if(diJi <max){

sheWei[++diJi] = new JLabel(new ImageIcon("tuPian\\isSheWei.jpg"))

f.add(sheWei[diJi])

sheWei[diJi].setBounds(sheWei[diJi-1].getX(),sheWei[diJi-1].getY(),JianJu,JianJu)

// System.out.println("diJi "+diJi)

}

}

public void pengZhuanJianCe(){//检测蛇的碰撞情况

if(sheTou.getX()<0 || sheTou.getY()<0 ||

sheTou.getX()>f.getWidth()-15 || sheTou.getY()>f.getHeight()-105 ){

gameOver()

// System.out.println("GameOVER")

}

if(sheTou.getX() == shiWu.getX() &&sheTou.getY() == shiWu.getY()){

out: while(true){

shiWu.setLocation((int)(Math.random()*32)*JianJu,(int)(Math.random()*28)*JianJu)

for(int i=0i<=diJii++){

if(shiWu.getX()!= sheWei[i].getX() &&shiWu.getY()!=sheWei[i].getY()

&&sheTou.getX()!=shiWu.getX() &&sheTou.getY()!= shiWu.getY()){//如果食物不在蛇身上则退出循环,产生食物成功

break out

}

}

}

sheJiaChang()

// System.out.println("吃了一个")

if(time>100 ){

time -= jianTime

}

else{}

Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+"时间:"+time+"ms 分数:"+(jiFenQi+=10)+"")

}

for(int i=0i<=diJii++){

if(sheTou.getX() == sheWei[i].getX() &&sheTou.getY() == sheWei[i].getY()){

gameOver()

// System.out.println("吃到尾巴了")

}

}

}

public void yunXing(){

while(true){

while(run){

if(fangXiang == 1){//上

y-=1

}

if(fangXiang == 2){//下

y+=1

}

if(fangXiang == 3){//左

x-=1

}

if(fangXiang == 4){//右

x+=1

}

x2 = sheTou.getX()

y2 = sheTou.getY()

sheTou.setLocation(x*JianJu,y*JianJu)//设置蛇头的坐标 网格数*间隔

for(int i=diJii>=0i--){

if(i==0){

sheWei[i].setLocation(x2,y2)

// System.out.println(i+" "+sheTou.getX()+" "+sheTou.getY())

}

else{

sheWei[i].setLocation(sheWei[i-1].getX(),sheWei[i-1].getY())

//System.out.println(i+" "+sheWei[i].getX()+" "+sheWei[i].getY())

}

}

pengZhuanJianCe()

try{

Thread.sleep(time)

}catch(Exception e){

e.printStackTrace()

}

}

Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+"时间:"+time+"ms 分数:"+(jiFenQi+=10)+"")

try{

Thread.sleep(200)

}catch(Exception e){

e.printStackTrace()

}

}

}

public void gameOver(){//游戏结束时处理

int in = JOptionPane.showConfirmDialog(f,"游戏已经结束!\n是否要保存分数","提示",JOptionPane.YES_NO_OPTION)

if(in == JOptionPane.YES_OPTION){

// System.out.println("YES")

String s = JOptionPane.showInputDialog(f,"输入你的名字:")

try{

FileInputStream fis = new FileInputStream("GaoFen.ini")//先把以前的数据读出来加到写的数据前

InputStreamReader isr = new InputStreamReader(fis)

BufferedReader br = new BufferedReader(isr)

String s2,setOut = ""

while((s2=br.readLine())!= null){

setOut =setOut+s2+"\n"

}

FileOutputStream fos = new FileOutputStream("GaoFen.ini")//输出到文件流

s = setOut+s+":"+jiFenQi+"\n"

fos.write(s.getBytes())

}catch(Exception e){}

}

System.exit(0)

}

public void keyTyped(KeyEvent arg0) {

// TODO 自动生成方法存根

}

public void keyPressed(KeyEvent arg0) {

// System.out.println(arg0.getSource())

if(arg0.getKeyCode() == KeyEvent.VK_UP){//按上下时方向的值相应改变

if(fangXiang != 2){

fangXiang = 1

// sheTou.setIcon(shang)//设置蛇的方向

}

//System.out.println("UP")

}

if(arg0.getKeyCode() == KeyEvent.VK_DOWN){

if(fangXiang != 1){

fangXiang = 2

// sheTou.setIcon(xia)

}

//System.out.println("DOWN")

}

if(arg0.getKeyCode() == KeyEvent.VK_LEFT){//按左右时方向的值相应改变

if(fangXiang != 4){

fangXiang = 3

//sheTou.setIcon(zhuo)

}

// System.out.println("LEFT")

}

if(arg0.getKeyCode() == KeyEvent.VK_RIGHT){

if(fangXiang != 3){

fangXiang = 4

//sheTou.setIcon(you)

}

// System.out.println("RIGHT")

}

}

public void keyReleased(KeyEvent arg0) {

// TODO 自动生成方法存根

}

public void actionPerformed(ActionEvent arg0) {

// TODO 自动生成方法存根

JMenuItem JI = (JMenuItem)arg0.getSource()

if(JI == play){

out = true

run = true

isRuned = true

gao.setEnabled(false)

zhong.setEnabled(false)

di.setEnabled(false)

}

if(JI == pause){

run = false

}

if(isRuned == false){//如果游戏还没运行,才可以设置级别

if(JI == gao){

time = 200

jianTime = 1

JiBie = "高级"

Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+"时间:"+time+"ms 分数:"+jiFenQi)

}

if(JI == zhong){

time = 400

jianTime = 2

JiBie = "中级"

Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+"时间:"+time+"ms 分数:"+jiFenQi)

}

if(JI == di){

time = 500

jianTime = 3

JiBie = "低级"

Message.setText("级别:"+JiBie+" 蛇长:"+(diJi+2)+"时间:"+time+"ms 分数:"+jiFenQi)

}

}

if(JI == GF){

try{

FileInputStream fis = new FileInputStream("GaoFen.ini")

InputStreamReader isr = new InputStreamReader(fis)

BufferedReader br = new BufferedReader(isr)

String s,setOut = ""

while((s=br.readLine())!= null){

setOut =setOut+s+"\n"

}

if(setOut.equals("")){

JOptionPane.showMessageDialog(f,"暂无保存记录!","高分榜",JOptionPane.INFORMATION_MESSAGE)

}

else{

JOptionPane.showMessageDialog(f,setOut)

}

}catch(Exception e){

e.printStackTrace()

}

}

if(JI == ZZ){//关于作者

JOptionPane.showMessageDialog(f,"软件作者:申志飞\n地址:四川省绵阳市\nQQ:898513806\nE-mail:[email protected]","关于作者",JOptionPane.INFORMATION_MESSAGE)

}

if(JI == YX){//关于游戏

JOptionPane.showMessageDialog(f,"贪吃蛇游戏\n游戏版本 V1.0","关于游戏",JOptionPane.INFORMATION_MESSAGE)

}

if(JI == QK){

try{

int select = JOptionPane.showConfirmDialog(f,"确实要清空记录吗?","清空记录",JOptionPane.YES_OPTION)

if(select == JOptionPane.YES_OPTION){

String setOut = ""

FileOutputStream fos = new FileOutputStream("GaoFen.ini")//输出到文件流

fos.write(setOut.getBytes())

}

}catch(Exception ex){}

}

}

}

//是我自己写的,本来里面有图片的,但无法上传,所以把图片去掉了,里面的ImageIcon等语句可以去掉。能正常运行。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/12528591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存