拼图游戏(js,C#,java三种语言)
<html> <head> <meta charset="utf-8"> <style type="text/css"> .haha { border-width: 2; font-size: 50; font-weight: bold; color: white; text-align: center; color: white; background-color: black; } .form { position: fixed; } </style> </head> <h4 id='de'></h4> <div class='form'> <input type="number" name="quantity" min="1" max="5" value="3" id='xsize'> <input type="number" name="quantity" min="1" max="5" value="3" id='ysize'> <button onclick="newGame()">提交</button> </div> <table align='center' id="table"> </table> <script> var xsize = 3, ysize = 3; var size = xsize * ysize; var a = new Array(size); var spaceX, spaceY; var table=document.getElementById("table") newGame(); function newGame() { xsize=document.getElementById('xsize').value; ysize=document.getElementById("ysize").value; size = xsize * ysize; a = new Array(size); clear(); shuffle(); init(); draw(); } onkeydown = keyDown; function print(s) { document.getElementById('de').innerHTML = s; } function clear() { for (var i = 0; i < size - 1; i++) a[i] = i + 1; a[size - 1] = 0; spaceX = xsize - 1; spaceY = ysize - 1; } function shuffle() { for (var i = 0; i < 100; i++) { var x, y; do { x = Math.floor(Math.random() * (size - 1)); y = Math.floor(Math.random() * (size - 1)); } while (x == y); var temp = a[x]; a[x] = a[y]; a[y] = temp; } } function keyDown(e) { var x = spaceX, y = spaceY; switch (e.keyCode) { case 37: y++; break; case 38: x++; break; case 39: y--; break; case 40: x--; break; } if (x >= 0 && y >= 0 && x < xsize && y < ysize) { var temp = a[x * ysize + y]; a[x * ysize + y] = a[spaceX * ysize + spaceY]; a[spaceX * ysize + spaceY] = temp; spaceX = x; spaceY = y; draw(); if (over()) { confirm('you win!'); clear(); shuffle(); draw(); } } } function over() { for (var i = 0; i < size - 1; i++) { if (a[i] != i + 1) return false; } return true; } function draw() { for (var i = 0; i < size; i++) { var img = document.getElementById('pic' + i); img.innerHTML = (a[i] == 0 ? "" : a[i]); } } function init() { var w = document.documentElement.clientHeight * 0.95 / xsize; var h = document.documentElement.clientWidth * 0.95 / ysize; w = h = Math.min(w, h); var html=""; for (var i = 0; i < xsize; i++) { html+="<tr>"; for (var j = 0; j < ysize; j++) { html+="<td width=" + Math.floor(w) + " height=" + Math.floor(h) + " class='haha' id=pic" + (i * ysize + j) + "></td>"; } html+="</tr>"; } table.innerHTML=html; } </script> <html>
==========================java版拼图游戏==============
import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.MenuBar; import java.awt.Rectangle; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import javax.swing.*; import java.util.Random; import javax.swing.*; public class Pintu extends JFrame { public static void main(String []args) { new Pintu(); } int[][] a = new int[4][4]; int x, y; void init() { for (int i = 0; i < 4; i++) for (int j = 0; j < 4; j++) a[i][j] = i * 4 + j; x=y=3; } Pintu() { setTitle("拼图游戏-made by weidiao.neu"); setSize(600,600); addKeyListener(listenKey); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); init(); shuffle(); } @Override public void paint(Graphics g) { Container pane=getContentPane(); BufferedImage bit=new BufferedImage(pane.getWidth(),pane.getHeight(),BufferedImage.TYPE_INT_ARGB); Graphics gg=bit.getGraphics(); gg.setColor(Color.BLUE); gg.fillRect(0, 0, bit.getWidth(), bit.getHeight()); for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ if(a[i][j]==15)continue; gg.drawImage(getPic(a[i][j]), j*pane.getWidth()/4, i*pane.getHeight()/4, pane.getWidth()/4-1, pane.getHeight()/4-1, null); } } pane.getGraphics().drawImage(bit, 0, 0, null); } private BufferedImage getPic(int i) { BufferedImage bit; Font font=new Font("Consolas",Font.BOLD,50); Rectangle2D rec= getFontMetrics(font).getStringBounds(i+"", getGraphics()); bit=new BufferedImage((int)rec.getWidth(),(int)rec.getHeight(),BufferedImage.TYPE_INT_ARGB); Graphics gg=bit.getGraphics(); gg.setColor(Color.BLACK); gg.fillRect(0, 0, bit.getWidth(), bit.getHeight()); gg.setFont(font); gg.setColor(Color.RED); gg.drawString(i+"",0, getFontMetrics(font).getAscent()); return bit; } private void shuffle() { Random r=new Random(); for(int i=0;i<100;i++){ int p=r.nextInt(15); int q=r.nextInt(15); if(p==q){ i--; } else{ int temp=a[p/4][p%4]; a[p/4][p%4]=a[q/4][q%4]; a[q/4][q%4]=temp; } } } KeyListener listenKey = new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: if (x == 3) return; else { int temp = a[x][y]; a[x][y] = a[x + 1][y]; a[x + 1][y] = temp; x++; } break; case KeyEvent.VK_DOWN: if (x == 0) return; else { int temp = a[x][y]; a[x][y] = a[x - 1][y]; a[x - 1][y] = temp; x--; } break; case KeyEvent.VK_RIGHT: if (y == 0) return; else { int temp = a[x][y]; a[x][y] = a[x][y - 1]; a[x][y - 1] = temp; y--; } break; case KeyEvent.VK_LEFT: if (y == 3) return; else { int temp = a[x][y]; a[x][y] = a[x][y + 1]; a[x][y + 1] = temp; y++; } break; } repaint(); if(checkWin()){ JOptionPane.showMessageDialog(Pintu.this, "You win"); init(); shuffle(); repaint(); } } private boolean checkWin() { // TODO Auto-generated method stub for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(a[i][j]!=i*4+j) return false; return true; } }; }
=================android版======================================
本程序没有用到图片资源。
package weidiao.pintu; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Point; import android.os.Bundle; import android.util.Log; import android.view.Gravity; import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; import java.util.ArrayList; import java.util.Random; public class MainActivity extends Activity { class MyView extends View { public MyView(Context context) { super(context); init(); shuffle(); initPaint(); } final int width = 4, height = 6; int a[][] = new int[width][height]; Point last; Point space; int d[] = {-1, 0, 0, -1, 1, 0, 0, 1}; Paint fill, stroke; @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { last = new Point((int) event.getX(), (int) event.getY()); } else if (event.getAction() == MotionEvent.ACTION_UP) { double dx = event.getX() - last.x, dy = event.getY() - last.y; double the = Math.atan2(dy, dx); if (the < 0) the += Math.PI * 2; int min = 0; for (int i = 1; i < 4; i++) { if (Math.abs(the - min * Math.PI / 2) > Math.abs(the - i * Math.PI / 2)) { min = i; } } if (move(min)) { if (isWin()) { Toast.makeText(getContext(), "you win!", Toast.LENGTH_LONG).show(); init(); shuffle(); } postInvalidate(); } } return true; } void initPaint() { fill = new Paint(); fill.setColor(Color.BLACK); fill.setStyle(Paint.Style.FILL); stroke = new Paint(); stroke.setTextSize(60); stroke.setStrokeWidth(3); stroke.setStyle(Paint.Style.STROKE); stroke.setColor(Color.WHITE); } void init() { for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { a[i][j] =j* width + i+1; } } a[width-1][height-1]=0; space = new Point(width-1, height-1); } boolean move(int dir) { int x = space.x + d[dir << 1], y = space.y + d[dir << 1 | 1]; if (x < 0 || x >= width || y < 0 || y >= height) return false; a[space.x][space.y] = a[x][y]; a[x][y] = 0; space = new Point(x, y); return true; } void shuffle() { Random r = new Random(); for (int i = 0; i < 100; i++) { move(r.nextInt(4)); } } boolean isWin() { int all = width * height; for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { if (a[i][j] != (j*width+i+1) % all) { return false; } } } return true; } @Override protected void onDraw(Canvas canvas) { float w = Math.min(getWidth() / width, getHeight() / height); for (int i = 0; i < width; i++) { for (int j = 0; j < height; j++) { canvas.drawRect(i * w + 2, j * w + 2, i * w + w - 2, j * w + w - 2, fill); if (a[i][j] > 0) canvas.drawText(a[i][j] + "", i * w + 102, j * w + 102, stroke); } } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); } }
拼图游戏(js,C#,java三种语言)的更多相关文章
- java php c# 三种语言的AES加密互转
java php c# 三种语言的AES加密互转 最近做的项目中有一个领取优惠券的功能,项目是用php写得,不得不佩服,php自带的方法简洁而又方便好用.项目是为平台为其他公司发放优惠券,结果很囧的是 ...
- 研究分析JS中的三种逻辑语句
JS中的三种逻辑语句:顺序.分支和循环语句. 一.顺序语句 代码规范如下:1. <script type="text/javascript"> var a = 10; ...
- 从同步阻塞聊到Java三种IO方式
本文总结自 https://zhuanlan.zhihu.com/p/34408883, https://www.zhihu.com/question/19732473中愚抄的回答, http://b ...
- js中的三种函数写法
js中的三种函数写法 <script type="text/javascript"> //普通的声明方式 function myFun(m,n){ alert(m+n) ...
- Java三种IO模型和LinuxIO五种IO模型
Java: https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/BIO-NIO-AIO.md https://github.co ...
- 拼图游戏js
实现算法: 1. JavaScript动态生成拼图:通过生成16个div,且除最后一个div不使用背景图片以外,其他div都设置拼图图片为背景.然后通过调整background-position来实现 ...
- js里面的三种注释方法
javascript(js)语言里面的注释方法有三种. 第一种是多行注释"/**/",一般js文件开头,介绍作者,函数等信息. /* *author:xxx *day:2008-0 ...
- Java三种编译方式
Java程序代码需要编译后才能在虚拟机中运行,编译涉及到非常多的知识层面:编译原理.语言规范.虚拟机规范.本地机器码优化等:了解编译过程有利于了解整个Java运行机制,不仅可以使得我们编写出更优秀的代 ...
- 前端js文件合并三种方式
最近在思考前端js文件该如何合并,当然不包括不能合并文件,而是我们能合并的文件,想了想应该也只有三种方式. 三个方式如下: 1. 一个大文件,所有js合并成一个大文件,所有页面都引用它. 2. 各个页 ...
随机推荐
- Android 播放电影时滑动屏幕调整屏幕亮度(转)
(转自:http://blog.csdn.net/piaozhiye/article/details/6544450) 发现有一些主流的播放器播放电影时可以通过滑动屏幕调整屏幕亮度,其实实现起来也很容 ...
- Javascript字数统计
字数统计功能,原理是给textarea添加onKeyup事件,事件读取textarea内容并获得长度,并赋值给统计字数的那个文本节点,这里有一点要注意的是添加onKeypress和onKeydown事 ...
- discuz mysqli_connect() 不支持 advice_mysqli_connect
看网友的解决方案是:下面2行去掉注释 ? 1 2 ;extension=php_mysql.dll ;extension=php_mysqli.dl 尝试修改 ? 1 #vi /etc/php.i ...
- Spring AOP 开发中遇到问题:Caused by: java.lang.IllegalArgumentException: warning no match for this type name: com.xxx.collector.service.impl.XxxServiceImpl [Xlint:invalidAbsoluteTypeName]
在网上找了很多,都不是我想要的,后来发现是我在springaop注解的时候 写错了类名导致的这个问题 @Pointcut("execution(* com.xxx.collector.ser ...
- C# 中的占位符本质
占位符本质 1.占位符是相对于String字符串类型而言的. 2.占位符其实就是调用String.Format()方法.把指定的变量拼接到定义好的字符串模板中组成新的字符串.
- 理解 Linux 网络栈(3):QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端)
本系列文章总结 Linux 网络栈,包括: (1)Linux 网络协议栈总结 (2)非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3)QEMU/KVM + Vx ...
- 学习OpenStack之 (2):Cinder LVM 配置
0.背景 OpenStack 中的实例是不能持久化的,cinder服务重启,实例消失.如果需要挂载 volume,需要在 volume 中实现持久化.Cinder提供持久的块存储,目前仅供给虚拟机挂载 ...
- windows下nodejs环境配置
一.下载 去nodejs下载node.msi安装文件包,里面包含了node.js和npm: 双击node.msi就行了,选择安装路径和npm: 二.设置环境变量 [新版本都不需要设计环境变量了,软件会 ...
- 今天有事-MySQL
hi 今天有事,一会儿要去耍,能学多少是多少吧 1.MySQL -----子查询与连接(二)----- ----子查询 子查询,是指出现在其他SQL语句内的SELECT子句 注意:子查询指嵌套在查询内 ...
- cuda fft 计算
#include <assert.h> #include <stdio.h> #include <stdlib.h> #include <string.h&g ...