拼图游戏源代码
拼图游戏源代码

import java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;import java.util.Collections;import java.util.List;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;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;@SuppressWarnings("serial")public class NumberGame extends JFrame implements ActionListener{ String path="LookingGirl/";int i=3;//定义一个卡片布局CardLayout card = new CardLayout();JMenuBar bar = new JMenuBar();JMenu menu=new JMenu("功能");JMenuItem jmi_start= new JMenuItem("开始游戏");JMenuItem jmi_viewImage= new JMenuItem("查看原图3");JMenuItem jmi_returnGame= new JMenuItem("返回游戏");JMenuItem jmi_exit = new JMenuItem("退出");//定义两个面板,一个用来显示原图,一个用来显示游戏区JPanel jp_game = new JPanel();JPanel jp_image = new JPanel();JLabel jl_image = new JLabel(new ImageIcon(path+"pic.jpg"));//定义一个二维数组,用来存储16个按钮JButton[][] number = new JButton[4][4];List<JButton> list = new ArrayList<JButton>();private void initMenu(){this.setJMenuBar(bar);bar.add(menu);menu.add(jmi_start);menu.add(jmi_viewImage);menu.add(jmi_returnGame);menu.addSeparator();menu.add(jmi_exit);MenuListener li = new MenuListener();jmi_start.addActionListener(li);jmi_viewImage.addActionListener(li);jmi_returnGame.addActionListener(li);jmi_exit.addActionListener(li);}//初使化图像区public void initImage(){jp_image.setLayout(new BorderLayout());jp_image.add(jl_image);}//初使化按钮数组,并将按钮放到面板中public void initGame(){//将面板的布局改成gridjp_game.setLayout(new GridLayout(4,4));for(int i=1;i<16;i++){JButton jb= new JButton();jb.setIcon(new ImageIcon(path+Integer.toString(i-1)+".jpg"));jb.setName(Integer.toString(i)); //给每个按钮起一个名字来区分list.add(jb);}//打乱顺序Collections.shuffle(list);JButton jb = new JButton();jb.setName("16");jb.setIcon(new ImageIcon(path+"15.jpg"));jb.setVisible(false);list.add(jb);for(int i=0;i<list.size();i++){number[i/4][i%4] = list.get(i);//为每个按钮加上监听number[i/4][i%4].addActionListener(this);number[i/4][i%4].setFont(new Font("宋体",Font.BOLD,24));jp_game.add(number[i/4][i%4]);}}//构造方法public NumberGame(){this.setBounds(100, 100, 400, 460);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置布局管理器this.setLayout(card);initMenu();initGame();initImage();this.add(jp_image,"image");this.add(jp_game,"game");//显示this.setVisible(true);}//交换两个按钮private void change(JButton a,JButton b){Icon str= a.getIcon();a.setIcon(b.getIcon());b.setIcon(str);String name = a.getName();a.setName(b.getName());b.setName(name);a.setVisible(!a.isVisible());b.setVisible(!b.isVisible());}//判断是否成功private void success(){boolean flag=true;for(int i=0;i<16;i++){if(!number[i/4][i%4].getName().equals(Integer.toString(i+1))){ System.out.println(i);flag=false;break;}}if(flag){//成功了number[3][3].setVisible(true);JOptionPane.showMessageDialog(this, "恭喜你,成功了","成功",JOptionPane.OK_OPTION,new ImageIcon("success.png"));}}@Overridepublic void actionPerformed(ActionEvent e) {JButton n=(JButton)e.getSource();//判断当前点击的是哪个按钮for(int i=0;i<4;i++){for(int j=0;j<4;j++){if(n==number[i][j]){//上if(i>0 && !number[i-1][j].isVisible()){change(n,number[i-1][j]);}else if(i<3 && !number[i+1][j].isVisible()){//下change(n,number[i+1][j]);}else if(j>0 && !number[i][j-1].isVisible()){//左change(n,number[i][j-1]);}else if(j<3 && !number[i][j+1].isVisible()){//右change(n,number[i][j+1]);}success();}}}}class MenuListener implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==jmi_start){//开始游戏card.show(NumberGame.this.getContentPane(), "game");}else if(e.getSource()==jmi_viewImage){i--;jmi_viewImage.setText("查看原图"+i);card.show(NumberGame.this.getContentPane(), "image");if(i<1){jmi_viewImage.setEnabled(false);}}else if(e.getSource()==jmi_returnGame){card.show(NumberGame.this.getContentPane(), "game");}else{int i=JOptionPane.showConfirmDialog(NumberGame.this, "你真的要退出吗?","提示",JOptionPane.OK_CANCEL_OPTION);if(i==JOptionPane.YES_OPTION){System.exit(0);}}}}public static void main(String[] args) {new NumberGame();}}。
java语言实现拼图游戏源代码

java语言实现拼图游戏源代码Java语言实现拼图游戏源代码 /** JAVA小游戏,拼图我做的第一个小游戏* Cell类是继承的按钮类,并加上相应图形,形成方格*MyCanvas是一个面板,加载Cell类的对象(方格),是这三个类中的核心 */ import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;import javax.swing.Icon;import javax.swing.ImageIcon; import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Button;import java.awt.Choice;import java.awt.Color;import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.Icon;import javax.swing.ImageIcon; import javax.swing.JFrame; importjavax.swing.JLabel; import javax.swing.JOptionPane; importjavax.swing.JPanel; import javax.swing.Icon;import javax.swing.JButton;public class MyMainFrame extends JFrame implements ActionListener { MyCanvas myCanvas;JPanel panelNorth,panelPreview;//定义上方的面板,及预览所需的面板Button start,preview,set;//定义开始,预览,设定按钮Container container;//容器,得到内容面板public MyMainFrame() {//初使化container=this.getContentPane(); start=new Button("开始");start.addActionListener(this); preview=new Button("预览");preview.addActionListener(this); set = new Button("设置");set.addActionListener(this); panelPreview=new JPanel();panelPreview.setLayout(null); Icon icon=newImageIcon("pic_"+MyCanvas.pictureID+".jpg");JLabel label=new JLabel(icon); label.setBounds(0,0,300,300); panelPreview.add(label);panelNorth=new JPanel();panelNorth.setBackground(Color.red); panelNorth.add(start);panelNorth.add(preview);panelNorth.add(set);myCanvas=new MyCanvas();container.add(myCanvas,BorderLayout.CENTER);container.add(panelNorth,BorderLayout.NORTH);this.setTitle("拼图小游戏-明");this.setLocation(300,200);this.setSize(308,365);this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(3); }public static void main(String[] args) {// TODO 自动生成方法存根new MyMainFrame();}public void actionPerformed(ActionEvent arg0) {//对三个按钮事件的处理 // TODO 自动生成方法存根Button button=(Button)arg0.getSource(); if(button==start){myCanvas.Start();}else if(button==preview){if(button.getLabel()=="预览"){container.remove(myCanvas); container.add(panelPreview); panelPreview.updateUI();container.repaint();button.setLabel("返回");}else{container.remove(panelPreview); container.add(myCanvas); container.repaint();button.setLabel("预览");}}else if(button==set){//修改所选图片Choice pic = new Choice(); pic.add("小猫");pic.add("小猪");pic.add("云");pic.add("QQ");pic.add("卡通");pic.add("花");int i=JOptionPane.showConfirmDialog(this, pic, "选择图片",JOptionPane.OK_CANCEL_OPTION);if(i==JOptionPane.YES_OPTION){ MyCanvas.pictureID=pic.getSelectedIndex() +1;myCanvas.reLoadPictrue(); Icon icon=newImageIcon("pic_"+MyCanvas.pictureID+".jpg");JLabel label=new JLabel(icon); label.setBounds(0,0,300,300); panelPreview.removeAll(); panelPreview.add(label);panelPreview.repaint();}}}}class MyCanvas extends JPanel implements MouseListener {boolean hasAddActionListener=false;//设置方格的动作监听器的标志位,TRUE为已经添加上动作事件,FALSE是尚未添加动作事件Cell cell[];//定义方格Rectangle cellNull;//定义空方格区域public static int pictureID=1;//当前选择的图片代号public MyCanvas() {this.setLayout(null);this.setSize(400,400);cellNull=new Rectangle(200,200,100,100);//空方格区域在第三行每三列cell=new Cell[9];Icon icon;for (int i = 0; i < 3; i++) {//为9个方格加载图片,并初使化坐标,形成三行三列 for(int j=0;j<3;j++){icon=new ImageIcon("pic_"+pictureID+"_"+(i*3+j+1)+".jpg");cell[i*3+j]=new Cell(icon); cell[i*3+j].setLocation(j*100,i*100); this.add(cell[i*3+j]);}}this.remove(cell[8]);//移除最后一个多余的方格}文章转自上海青大实训:谣言:吃太咸了会得病,导语:“人体每日摄入食盐不应过多,否则易患多种疾病。
C语言实现拼图游戏源码

C语⾔实现拼图游戏源码本⽂实例为⼤家分享了C语⾔实现拼图游戏的具体代码,供⼤家参考,具体内容如下#include<stdio.h>#include<stdlib.h>#include<time.h>#include<conio.h>int step=0;void map()//游戏菜单函数。
{ printf("▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");printf("█拼图游戏█\n");printf("█ 1. 3×3 █\n");printf("█ 2. 4×4 █\n");printf("█ 3. 5×5 █\n");printf("█ 4. 退出█\n");printf("▇▇▇▇▇▇▇▇▇▇▇▇▇▇\n");}void fun(int *a,int t,int m,int r){int i;int g;for(i=0;i<m;i++){if(i%r==(r-1)&&(i+t)%r==0)//让数组不能跨⾏转换。
continue;if(i%r==0&&(i+t)%r==(r-1))continue;if(a[i+t]==0 && (i+t)>=0 && (i+t)<m){g=a[i];a[i]=a[i+t];a[i+t]=g;step++;return ;}}}void move(int *a,int m,int r){//上下左右移动函数。
char ch;int i,j;while(ch=getch()){system("cls");if(ch=='w'){i=-r;fun(a,i,m,r);}else if(ch=='s'){i=r;fun(a,i,m,r);}else if(ch=='a'){i=-1;{i=1;fun(a,i,m,r);}else if(ch=='4'){printf("您已退出游戏,请下次再玩!\n");exit(0);}for(i=0;i<m;i++){if(a[i]==0)printf(" ");elseprintf("%2d ",a[i]);if((i+1)%r==0)putchar(10);}printf("共⾛:%d步!\n",step);}}void map_x(int m,int r){int i=1,j,a[25],n;srand(time(NULL));printf("拼图游戏开始了:\n");while(i<m){n=1+rand()%(m-1);for(j=1;j<i;j++){if(n==a[j])break;}if(j==i){a[i]=n;i++;}}a[0]=0;for(i=0;i<m;i++){if(a[i]==0)printf(" ");elseprintf("%2d ",a[i]);if((i+1)%r==0)putchar(10);}printf("共⾛:%d步!\n",step);move(a,m,r);}int main(){int i,n;char ch;map();//显⽰菜单。
Flash.as数字拼图游戏代码

Flash.as数字拼图游戏代码Flash .as数字拼图游戏Main.as⽂件package {import flash.display.Sprite;import com.RectShape;import flash.events.MouseEvent;public class Main extends Sprite {private var indexshape:Array =new Array(1,2,3,4,5,6,7,8);private var ditu:Array =new Array(new Array(3),new Array(3),new Array(3));private var pailie:Array =new Array(new Array(0,0),new Array(40,0),new Array(80,0),new Array(0,40),new Array(40,40),new Array(80,40),new Array(0,80),new Array(40,80),new Array(80,80));//将⼀个120的正⽅形切割成9份;public function Main():void {init();}private function init():void {var kuang:Sprite=new Sprite();kuang.graphics.lineStyle(3,0xff000ff);//笔触为3的紫⾊矩形kuang.graphics.drawRect(0,0,120,120);//画边框;kuang.graphics.endFill();kuang.x=215;kuang.y=140;addChild(kuang);for (var i:uint=0; i<3; i++) {//如果这个位置没有⼩⽅块则值设为1;for (var t:uint=0; t<3; t++){ditu[i][t]=1;}}for (var n:uint=1; n<=8; n++) {//制作⼩⽅块;var hao:uint=Math.floor(Math.random()*indexshape.length);//取下限值,hao是下标var bianhao:uint=indexshape[hao];indexshape.splice(hao,1);//删除下标;var rect:RectShape=new RectShape(bianhao);rect.mouseChildren=false;//⼩⽅块中的⽂本不再接收事件:对象的⼦容器为falsevar weizhi:uint=Math.floor(Math.random()*pailie.length);var dui:Array=pailie[weizhi];pailie.splice(weizhi,1);rect.x=dui[0];rect.y=dui[1];rect.X=dui[0]/40;rect.Y=dui[1]/40;kuang.addChild(rect);ditu[dui[0]/40][dui[1]/40]=0;rect.addEventListener(MouseEvent.CLICK,dong);}}private function dong(evt:MouseEvent):void {var left:uint=evt.target.X-1;var right:uint=evt.target.X+1;var up:uint=evt.target.Y-1;var down:uint=evt.target.Y+1;if (left!=4294967295 && ditu[left][evt.target.Y]==1) {//向左移动ditu[evt.target.X][evt.target.Y]=1;ditu[left][evt.target.Y]=0;evt.target.X=left;evt.target.x-=40;//被点击的⽅块像素向左移40;} else if (right!=3 && ditu[right][evt.target.Y]==1) {//向右移动ditu[evt.target.X][evt.target.Y]=1;ditu[right][evt.target.Y]=0;evt.target.X=right;evt.target.x+=40;} else if (up!=4294967295 && ditu[evt.target.X][up]==1) {//向上移动ditu[evt.target.X][evt.target.Y]=1; ditu[evt.target.X][up]=0;evt.target.Y=up;evt.target.y-=40;} else if (down!=3&&ditu[evt.target.X][down]==1) {//向下移动ditu[evt.target.X][evt.target.Y]=1;ditu[evt.target.Y][down]=0;evt.target.Y=down;evt.target.y+=40; }}}}结果:。
拼图源代码

头文件#include "windows.h"#include "stdio.h"#include <mmsystem.h>#pragma comment(lib,"winmm.lib")//全局变量声明HINSTANCE hInst;HBITMAP hbmp;HDC mdc, hdc;HWND hWnd;DWORD tPre,tNow;inti,j,count=0,flg=1;HINSTANCE hInstance; intnCmdShow;//全局函数的声明ATOM MyRegisterClass(HINSTANCE hInstance);BOOL InitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);voidMyPaint();voidPlayGame(WPARAM );void Win();//****﹚设计一个窗口类,类似填空题,使用窗口结构体************************* ATOM MyRegisterClass(HINSTANCE hInstance){WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style= CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc= (WNDPROC)WndProc;wcex.cbClsExtra= 0;wcex.cbWndExtra= 0;wcex.hInstance= hInstance;wcex.hIcon= NULL;wcex.hCursor= NULL;wcex.hCursor= LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground= (HBRUSH)GetStockObject(WHITE_BRUSH);wcex.lpszMenuName= NULL;wcex.lpszClassName= "canvas";wcex.hIconSm= NULL;returnRegisterClassEx(&wcex);}//****初始化函数*************************************// 1.建立与窗口DC兼容的内存DC// 2.从文件加载位图并存至内存DC中BOOL InitInstance(HINSTANCE hInstance, intnCmdShow){hInst = hInstance;hWnd = CreateWindow("canvas", "ytu.小翅膀之拼图" , WS_OVERLAPPEDWINDOW&~WS_THICKFRAME&~WS_MAXIMIZEBOX,0, 0, 600, 450, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}MoveWindow(hWnd,10,100,1000,500,true);ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);PlaySound("sound.wav",NULL,SND_ASYNC|SND_LOOP);MyPaint();ReleaseDC(hWnd,hdc);return TRUE;}源文件#include "header.h"int a[4][4]={{1,4},{2,3}};int b[4][4]={{2,5,3},{4,8,6},{7,1,9}};int c[4][4]={{2,3,7,4},{5,6,11,8},{9,10,15,12},{13,14,1,16}};int d[4][4]={{1,4},{2,3}};//****Winmain函数,程序入口点函数**************************************int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){MSG msg;MyRegisterClass(hInstance);if (!InitInstance (hInstance, nCmdShow)){return FALSE;}//消息循环while (GetMessage(&msg, NULL, 0, 0)){TranslateMessage(&msg);DispatchMessage(&msg);}returnmsg.wParam;}//****自定义绘图函数*********************************voidMyPaint(){hdc = GetDC(hWnd);mdc = CreateCompatibleDC(hdc);intnum=(flg+1);int w=600/num,h=450/num;for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){char picName[10];if(flg==1)sprintf(picName,"1/%d.bmp",a[i][j]);else if(flg==2)sprintf(picName,"2/%d.bmp",a[i][j]);else if(flg==3)sprintf(picName,"3/%d.bmp",a[i][j]);hbmp=(HBITMAP)LoadImage(NULL,picName,IMAGE_BITMAP,w,h,LR_LOADFROMFILE);SelectObject(mdc,hbmp);//采用BitBlt函数贴图BitBlt(hdc,w*j,h*i,w,h,mdc,0,0,SRCCOPY);}}char step[30]; //定义一个字符型数组,用来存放以下字符串sprintf(step,"您已经走了<%d>步",count); SetTextColor(hdc,0x000FFF);//字体的颜色TextOut(hdc,600,0, step,(int)strlen(step));sprintf(step,"组长:xx"); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,20, step,(int)strlen(step));sprintf(step,"组员:xx"); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,40, step,(int)strlen(step));sprintf(step," xx"); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,60, step,(int)strlen(step));sprintf(step," xx"); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,80, step,(int)strlen(step));sprintf(step," xx"); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,100, step,(int)strlen(step));sprintf(step," xx"); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,120, step,(int)strlen(step));sprintf(step," xx”); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,140, step,(int)strlen(step));sprintf(step," xx"); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,160, step,(int)strlen(step));sprintf(step,"倾力之作!!!!"); SetTextColor(hdc,0xFF000F);//字体的颜色TextOut(hdc,600,180, step,(int)strlen(step));if(flg==1){hbmp=(HBITMAP)LoadImage(NULL,"1/yuantu.bmp",IMAGE_BITMAP,400,250,LR_LOADFRO MFILE);}else if(flg==2)hbmp=(HBITMAP)LoadImage(NULL,"2/yuantu.bmp",IMAGE_BITMAP,400,250,LR_LOADFRO MFILE);else if(flg==3)hbmp=(HBITMAP)LoadImage(NULL,"3/yuantu.bmp",IMAGE_BITMAP,400,250,LR_LOADFRO MFILE);SelectObject(mdc,hbmp);//采用BitBlt函数贴图BitBlt(hdc,600,200,400,300,mdc,0,0,SRCCOPY);}//****消息处理函数**********************************LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {PAINTSTRUCT ps;HDC hdc;switch (message){case WM_KEYDOWN://监听键盘事件(判断你按的是哪个键)PlayGame(wParam);break;//窗口重绘消息case WM_PAINT:hdc = BeginPaint(hWnd, &ps);MyPaint();EndPaint(hWnd, &ps);break;//窗口结束消息case WM_DESTROY:DeleteDC(mdc);DeleteObject(hbmp);PostQuitMessage(0);break;//其他消息default:returnDefWindowProc(hWnd, message, wParam, lParam);}return 0;}voidPlayGame(WPARAM wParam){switch(wParam){int temp;case VK_UP:count++;for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){if(i>0&&a[i][j]==1){temp=a[i-1][j];a[i-1][j]=a[i][j];a[i][j]=temp;MyPaint();Win();}}}break;case VK_DOWN:count++;for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){if(i<flg&&a[i][j]==1){temp=a[i+1][j];a[i+1][j]=a[i][j];a[i][j]=temp;MyPaint();Win();}}}break;case VK_RIGHT:count++;for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){if(j<flg&&a[i][j]==1){temp=a[i][j+1];a[i][j+1]=a[i][j];a[i][j]=temp;MyPaint();Win();}}}break;case VK_LEFT:count++;for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){if(j>0&&a[i][j]==1){temp=a[i][j-1];a[i][j-1]=a[i][j];a[i][j]=temp;MyPaint();Win();}}}break;}}void Win(){int n=0,m=0;for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){n++;if (a[i][j]==n){m++;}}}if(m==n){if(flg>=3){if(IDYES==MessageBox(NULL,"恭喜您,通关了!!!\n是否重玩?","提示",MB_YESNO)){flg=1;for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){a[i][j]=d[i][j];}}count=0;MyPaint();}elsePostQuitMessage(0);}elseif(IDYES==MessageBox(NULL,"你赢了!是否进入下一关?","提示",MB_YESNO)){flg++;if(flg==2){ for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){a[i][j]=b[i][j];}}}else if(flg==3){for(i=0;i<=flg;i++){for(j=0;j<=flg;j++){a[i][j]=c[i][j];}}}count=0;MyPaint();}elsePostQuitMessage(0);}}。
拼图游戏源代码

Option ExplicitDim imageid(8) As Integer '记录图片排列的顺序的数组Dim position As Integer '被点击的图片位置Dim xposition As Integer '空图片的位置Dim movetimes As Integer '记录移动次数Dim calposition As Integer '用于计算位置Dim started As Boolean '是否开始Dim win As Boolean '是否胜利Dim pic(9) As Picture '存储图像的数组对象Dim pic1 As PicturePrivate Sub Command1_Click()Dim i As IntegerDim temp(8) As IntegerDim chosennumber As IntegerFor i = 0 To 7temp(i) = iNextRandomizeFor i = 7 To 0 Step -1chosennumber = Int(i * Rnd)imageid(7 - i) = temp(chosennumber)temp(chosennumber) = temp(i)NextFor i = 0 To 7Picture1(i).Picture = pic(imageid(i))NextPicture1(9).Picture = pic(8)Picture1(8).Picture = pic(9)xposition = 8started = Truemovetimes = 0End SubPrivate Sub Form_Load()Dim i As IntegerFor i = 0 To 8Set pic(i) = Picture1(i).PictureNextEnd SubPrivate Sub Picture1_Click(Index As Integer)Dim i As IntegerDim response As Integerposition = IndexIf started = False ThenExit SubEnd IfIf (position <> 0) And (position <> 3) And (position <> 6) Thencalposition = position - 1If calposition = xposition ThencvaleEnd IfEnd IfIf (position <> 2) And (position <> 5) And (position <> 9) Thencalposition = position + 1If calposition = xposition ThencvaleEnd IfEnd IfText1.Text = Str(position)If position <= 5 Thencalposition = position + 3Text2.Text = Str(calposition)If calposition = xposition ThencvaleEnd IfEnd IfIf position >= 3 And position <> 9 Thencalposition = position - 3If calposition = xposition ThencvaleEnd IfEnd Ifwin = TrueFor i = 0 To 7If imageid(i) <> i Thenwin = FalseExit ForEnd IfNextIf win = True ThenMsgBox "恭喜恭喜!您很聪明" & "共移动" & vbCrLf & movetimes & "次", vbOKOnly started = FalseEnd IfEnd SubPrivate Sub cvale()Set pic1 = Picture1(position).PicturePicture1(position).Picture = Picture1(calposition).Picture Picture1(calposition).Picture = pic1xposition = positionEnd Sub。
Java语言实现拼图游戏源代码

Java语言实现拼图游戏源代码/** JA V A小游戏-拼图我做的第一个小游戏* Cell类是继承的按钮类,并加上相应图形,形成方格*MyCanvas是一个面板,加载Cell类的对象〔方格〕,是这三个类中的核心*/import java.awt.Rectangle;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Choice;import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.Icon;import javax.swing.JButton;public class MyMainFrame extends JFrame implements ActionListener { MyCanvas myCanvas;JPanel panelNorth,panelPreview;//定义上方的面板,及预览所需的面板Button start,preview,set;//定义开始,预览,设定按钮Container container;//容器,得到内容面板public MyMainFrame() {//初使化container=this.getContentPane();start=new Button("开始");start.addActionListener(this);preview=new Button("预览");preview.addActionListener(this);set = new Button("设置");set.addActionListener(this);panelPreview=new JPanel();panelPreview.setLayout(null);Icon icon=new ImageIcon("pic_"+MyCanvas.pictureID+".jpg");JLabel label=new JLabel(icon);label.setBounds(0,0,300,300);panelPreview.add(label);panelNorth=new JPanel();panelNorth.setBackground(Color.red);panelNorth.add(start);panelNorth.add(preview);panelNorth.add(set);myCanvas=new MyCanvas();container.add(myCanvas,BorderLayout.CENTER);container.add(panelNorth,BorderLayout.NORTH);this.setTitle("拼图小游戏-明");this.setLocation(300,200);this.setSize(308,365);this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(3);}public static void main(String[] args) {// TODO 自动生成方法存根new MyMainFrame();}public void actionPerformed(ActionEvent arg0) {//对三个按钮事件的处理// TODO 自动生成方法存根Button button=(Button)arg0.getSource();if(button==start){myCanvas.Start();}else if(button==preview){if(button.getLabel()=="预览"){container.remove(myCanvas);container.add(panelPreview);panelPreview.updateUI();container.repaint();button.setLabel("返回");}else{container.remove(panelPreview);container.add(myCanvas);container.repaint();button.setLabel("预览");}}else if(button==set){//修改所选图片Choice pic = new Choice();pic.add("小猫");pic.add("小猪");pic.add("云");pic.add("QQ");pic.add("卡通");pic.add("花");int i=JOptionPane.showConfirmDialog(this, pic, "选择图片", JOptionPane.OK_CANCEL_OPTION);if(i==JOptionPane.YES_OPTION){MyCanvas.pictureID=pic.getSelectedIndex()+1;myCanvas.reLoadPictrue();Icon icon=new ImageIcon("pic_"+MyCanvas.pictureID+".jpg");JLabel label=new JLabel(icon);label.setBounds(0,0,300,300);panelPreview.removeAll();panelPreview.add(label);panelPreview.repaint();}}}}class MyCanvas extends JPanel implements MouseListener {boolean hasAddActionListener=false;//设置方格的动作监听器的标志位,TRUE为已经添加上动作事件,FALSE是尚未添加动作事件Cell cell[];//定义方格Rectangle cellNull;//定义空方格区域public static int pictureID=1;//当前选择的图片代号public MyCanvas() {this.setLayout(null);this.setSize(400,400);cellNull=new Rectangle(200,200,100,100);//空方格区域在第三行每三列cell=new Cell[9];Icon icon;for (int i = 0; i < 3; i++) {//为9个方格加载图片,并初使化坐标,形成三行三列for(int j=0;j<3;j++){icon=new ImageIcon("pic_"+pictureID+"_"+(i*3+j+1)+".jpg");cell[i*3+j]=new Cell(icon);cell[i*3+j].setLocation(j*100,i*100);this.add(cell[i*3+j]);}}this.remove(cell[8]);//移除最后一个多余的方格}文章转自上海青大实训:。
python 拼图游戏代码

# -*- coding: utf-8 -*-import simpleguitk as simpleguiimport random# 载入外部图像baymax = simplegui.load_image("/c4x/XJAU/CS101/asset/baymax.jpg")# 定义常量# 画布的尺寸WIDTH = 600HEIGHT = WIDTH + 100# 图像块的边长IMAGE_SIZE = WIDTH / 3# 图像块坐标列表all_coordinates = [[IMAGE_SIZE*0.5, IMAGE_SIZE*0.5], [IMAGE_SIZE*1.5, IMAGE_SIZE*0.5],[IMAGE_SIZE*2.5, IMAGE_SIZE*0.5], [IMAGE_SIZE*0.5, IMAGE_SIZE*1.5],[IMAGE_SIZE*1.5, IMAGE_SIZE*1.5], [IMAGE_SIZE*2.5, IMAGE_SIZE*1.5],[IMAGE_SIZE*0.5, IMAGE_SIZE*2.5], [IMAGE_SIZE*1.5, IMAGE_SIZE*2.5], None] # 棋盘行列数ROWS = 3COLS = 3# 移动步数steps = 0# 保存所有图像块的列表board = [[None, None, None],[None, None, None],[None, None, None]]# 图像块类class Square:def __init__(self, coordinate):self.center = coordinatedef draw(self, canvas, board_pos):canvas.draw_image(baymax, self.center, [IMAGE_SIZE,IMAGE_SIZE],[(board_pos[1]+0.5)*IMAGE_SIZE, (board_pos[0]+0.5)*IMAGE_SIZE], [IMAGE_SIZE, IMAGE_SIZE])# 初始化拼图板def init_board():# 打乱图像块坐标random.shuffle(all_coordinates)# 填充拼图板for i in range(ROWS):for j in range(COLS):idx = i * ROWS + jsquare_center = all_coordinates[idx]if square_center is None:board[i][j] = Noneelse:board[i][j] = Square(square_center)# 重置游戏def play_game():global stepssteps = 0init_board()# 绘制游戏界面各元素def draw(canvas):# 画黑框canvas.draw_polygon([[0, 0], [WIDTH, 0], [WIDTH, WIDTH], [0, WIDTH]], 1, 'Black')# 画目标图像canvas.draw_image(baymax, [WIDTH/2, WIDTH/2], [WIDTH, WIDTH], [50, WIDTH+50], [98, 98]) # 画步数canvas.draw_text("步数:"+str(steps), [400, 680], 22, "White")# 画图像块# 代码写在这里for i in range(ROWS):for j in range(COLS):if board[i][j] is not None:board[i][j].draw(canvas, [i, j])def mouseclick(pos):global steps# 将点击位置换算成拼图板上的坐标r = int(pos[1] // IMAGE_SIZE)c = int(pos[0] // IMAGE_SIZE)if r < 3 and c < 3: # 点击位置在拼图板内才移动图片if board[r][c] is None: # 点到空位置上什么也不移动returnelse:# 依次检查当前图像块的上,下,左,右是否有空位置,如果有就移动当前图像块# 代码写在这里current_square = board[r][c]if r - 1 >= 0 and board[r-1][c] is None: # 判断上面board[r][c] = Noneboard[r-1][c] = current_squaresteps += 1elif c + 1 <= 2 and board[r][c+1] is None: # 判断右面board[r][c] = Noneboard[r][c+1] = current_squaresteps += 1elif r + 1 <= 2 and board[r+1][c] is None: # 判断下面board[r][c] = Noneboard[r+1][c] = current_squaresteps += 1elif c - 1 >= 0 and board[r][c-1] is None: # 判断左面board[r][c] = Noneboard[r][c-1] = current_squaresteps += 1# 创建框架frame = simplegui.create_frame("拼图", WIDTH, HEIGHT)frame.set_canvas_background("Black")frame.set_draw_handler(draw)frame.add_button("重新开始", play_game, 60)# 注册鼠标事件frame.set_mouseclick_handler(mouseclick) # 初始化游戏play_game()# 启动框架frame.start()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//*关卡开始前 booleanfirstStart=true;//是否首次运行标志 musicNum=1;//音乐不够,以此变量做两首歌更换标志 privatevoiddoStartPa ...{ //*关卡化 lm=LayerManager; puzzlePic=creatPuzzlePic; //*测试用 //puzzlePic=creatTestPuzzlePic;//测试用 lm.append(puzzlePic);
//播放声音 //西门子模拟器不支持下面这段代码,但实体机子完美支持 try ...{ InputStreamin; //in=getClass.getResourceAsStream(\"/res/music\"+stageNum+\".mid\");这是有5首音乐时候使用 //只有两首歌时候使用 (musicNum1) ...{ in=getClass.getResourceAsStream(\"/res/music1.mid\"); [Page] musicNum=2; } ...{ in=getClass.getResourceAsStream(\"/res/music2.mid\"); musicNum=1; } player=Manager.createPlayer(in,\"audio/midi\"); player.LoopCount(10); player.start; } catch(IOExceptione)...{}
/***//**储存损耗时间,普通模式用到*/ privatelongusedTime; [Page] /***//**储存单关通过最短时间*/ privatelongquicklyPassOneStageTime; /***//**游戏过程暂停状态所用标志*/ privatebooleanisGamePaused; /***//**储存显示对象*/ privateDisplaydisplay;
STAGE_PLAYING_SEE_PERFECT_PIC: doPlayingSeePerfectPicPa; ; STAGE_OVER: doStageOverPa; ; STAGE_CLEAR: doStageClearPa; ; ALL_STAGE_CLEAR: doStageAllClearPa; ; GAME_END: doGameEndPa; ;
catch(MediaExceptione)...{}
gameState=STAGE_PLAYING;
//创建并启动计时器 (firstStarttrue||gameModeMODE_NORMAL) ...{ (gameModeMODE_NORMAL) ...{ timeCounter=TimeCounterTask(300); } (gameModeMODE_UTMOST)//此段代码只在第次时运行 ...{ timeCounter=TimeCounterTask(900); [Page] } Timertimer=Timer; timer.schedule(timeCounter,1000,1000); firstStart=false; } ...{ timeCounter=TimeCounterTask(lastTime); Timertimer=Timer; timer.schedule(timeCounter,1000,1000); firstStart=false; .out.prln(\"first\"); } // render; } //*游戏进行中 privatevoiddoPlayingPa
} } //*画出关卡画面* privatevoiddoTitlePa ...{ dispWidth=this.getWidth; dispHeight=this.getHeight; g.Color(255,255,255); g.fillRect(0,0,getWidth,getHeight); [Page] Imageimg1=creatImage(\"/res/ready.png\"); g.drawImage(img1,(dispWidth-img1.getWidth)/2,(dispHeight-img1.getHeight)/2-4,0); Imageimg2=creatImage(\"/res/num\"+stageNum+\".png\"); g.drawImage(img2,(dispWidth-img2.getWidth)/2,(dispHeight-img1.getHeight)/2+img1.getHeight1,0); this.flushGraphics; }
/***//**储存音乐对象*/ privatePlayerplayer;//西门子C65不支持 /***//**储存主类对象,方便进行退出的类操作*/ privateCrazyPuzzleMIDletMIDlet; /***//**层管理*/ privateLayerManagerlm; /***//**背景*/ privateTiledLayerpuzzlePic; /***//**建个画图对象*/ privateGraphicsg; /***//**时间倒计时,类为继承*/ privateTimeCounterTasktimeCounter; /***//**储存各关卡谜题资讯变量*/ privatefinalPUZZLE_MAP=...{ ...{//关卡1谜题 1,5,9,13, 2,6,10,14, [Page] 3,7,11,15, 4,8,12,0 }, ...{//关卡2谜题 4,3,2,1, 8,7,6,5, 12,11,10,9, 15,13,14,0 }, ...{//关卡3谜题 12,8,4,1, 15,9,5,2, 13,10,6,3,
this.addCommand(Command(\"取消\",Command.BACK,1)); this.addCommand(Command(\"返回列表\",Command.BACK,1)); this.addCommand(Command(\"退出游戏\",Command.EXIT,1)); mandListener(this); render; } publicvoidcommandAction(Commandcommand,Displayablearg1) ...{ //TODOAuto-generatedmethodstub [Page] Stringcmd=command.getLabel; (cmd.equals(\"重新开始\")) ...{ //不知为何,下面这段代码无法正常关闭音乐流,无论在模拟器还是在实体机上 //造成后果是两首音乐起播放,以致于系统变慢,无法正常游戏 //估计产生原因是上首歌还没退出来,下首就播放了 //关闭本节声音播放,以方便下关播放新音乐 gameState=STAGE_TITLE; try ...{ player.stop; } catch(Excepti7,0 }, ...{//关卡4谜题 14,15,12,13, 8,9,10,11, 4,5,6,7, 1,2,3,0
}, ...{//关卡5谜题 14,12,15,13, 11,10,9,8, [Page] 7,6,5,4, 3,2,1,0 } }; //norains:*构造* publicMyGameCanvas(Displaydisp,CrazyPuzzleMIDletm,mode) ...{ super(false); this.display=disp; this.MIDlet=m; this.gameMode=mode; stageNum=1; stagePassedNum=0; lastTime=0; usedTime=0; quicklyPassOneStageTime=0; isGamePaused=false; g=this.getGraphics; gameState=STAGE_TITLE; this.FullScreenMode(true);//全屏幕 //增加命令 //this.addCommand(Command(\"重新开始\",Command.OK,1));
/***//**最大关卡数*/ privatefinalMAX_STAGE=5; /***//**正常模式常量*/ publicfinalMODE_NORMAL=1; /***//**极限模式常量*/ publicfinalMODE_UTMOST=2; /***//**储存现在的显示状态变量*/ privategameState; /***//**储存游戏模式变量*/ privategameMode; /***//**储存目前关卡*/ privatestageNum; /***//**储存已过关关卡*/ privatestagePassedNum; /***//**储存剩余时间*/ privatelonglastTime;
render; } (cmd.equals(\"返回列表\")) ...{ (player!=null)
...{
//关闭本节声音播放 try ...{ player.stop; [Page] } catch(Exceptionexp) ...{} } ListChoiceScreenlcs=ListChoiceScreen(display,MIDlet); display.Current(lcs); } (cmd.equals(\"退出游戏\")) ...{ MIDlet.notyDestroyed; } (cmd.equals(\"取消\")) ...{ //什么都不做,返回原画面 } } //*主要是用来绘图 publicvoidrender ...{ switch(gameState) ...{ STAGE_TITLE: doTitlePa; ; STAGE_START: doStartPa; ; STAGE_PLAYING: [Page] doPlayingPa; ;