辞年游戏网

您现在的位置是: 首页 > 策略塔防

文章内容

手机小游戏源码_手机小游戏源码怎么用

zmhk 2024-07-10
手机小游戏源码_手机小游戏源码怎么用       非常感谢大家对手机小游戏源码问题集合的贡献。我会努力给出简明扼要的回答,并根据需要提供一些具体实例来支持我的观点,希望这能给大家带来一些新的思路。1.急求俄罗斯方块等小游戏的源代码2.c语言小游戏代码3.求经
手机小游戏源码_手机小游戏源码怎么用

       非常感谢大家对手机小游戏源码问题集合的贡献。我会努力给出简明扼要的回答,并根据需要提供一些具体实例来支持我的观点,希望这能给大家带来一些新的思路。

1.急求俄罗斯方块等小游戏的源代码

2.c语言小游戏代码

3.求经典小游戏(五子棋 贪吃蛇 俄罗斯方块等)c++ 源代码。最好能有软件设计过程 我想学思路

4.(完整word版)纯C语言写的一个小型游戏 源代码

5.求java小游戏源代码

手机小游戏源码_手机小游戏源码怎么用

急求俄罗斯方块等小游戏的源代码

       俄罗斯方块——java源代码提供

       import java.awt.*;

       import java.awt.event.*;

       //俄罗斯方块类

       public class ERS_Block extends Frame{

       public static boolean isPlay=false;

       public static int level=1,score=0;

       public static TextField scoreField,levelField;

       public static MyTimer timer;

       GameCanvas gameScr;

       public static void main(String[] argus){

       ERS_Block ers = new ERS_Block("俄罗斯方块游戏 V1.0 Author:Vincent");

       WindowListener win_listener = new WinListener();

       ers.addWindowListener(win_listener);

       }

       //俄罗斯方块类的构造方法

       ERS_Block(String title){

       super(title);

       setSize(600,480);

       setLayout(new GridLayout(1,2));

       gameScr = new GameCanvas();

       gameScr.addKeyListener(gameScr);

       timer = new MyTimer(gameScr);

       timer.setDaemon(true);

       timer.start();

       timer.suspend();

       add(gameScr);

       Panel rightScr = new Panel();

       rightScr.setLayout(new GridLayout(2,1,0,30));

       rightScr.setSize(120,500);

       add(rightScr);

       //右边信息窗体的布局

       MyPanel infoScr = new MyPanel();

       infoScr.setLayout(new GridLayout(4,1,0,5));

       infoScr.setSize(120,300);

       rightScr.add(infoScr);

       //定义标签和初始值

       Label scorep = new Label("分数:",Label.LEFT);

       Label levelp = new Label("级数:",Label.LEFT);

       scoreField = new TextField(8);

       levelField = new TextField(8);

       scoreField.setEditable(false);

       levelField.setEditable(false);

       infoScr.add(scorep);

       infoScr.add(scoreField);

       infoScr.add(levelp);

       infoScr.add(levelField);

       scorep.setSize(new Dimension(20,60));

       scoreField.setSize(new Dimension(20,60));

       levelp.setSize(new Dimension(20,60));

       levelField.setSize(new Dimension(20,60));

       scoreField.setText("0");

       levelField.setText("1");

       //右边控制按钮窗体的布局

       MyPanel controlScr = new MyPanel();

       controlScr.setLayout(new GridLayout(5,1,0,5));

       rightScr.add(controlScr);

       //定义按钮play

       Button play_b = new Button("开始游戏");

       play_b.setSize(new Dimension(50,200));

       play_b.addActionListener(new Command(Command.button_play,gameScr));

       //定义按钮Level UP

       Button level_up_b = new Button("提高级数");

       level_up_b.setSize(new Dimension(50,200));

       level_up_b.addActionListener(new Command(Command.button_levelup,gameScr));

       //定义按钮Level Down

       Button level_down_b =new Button("降低级数");

       level_down_b.setSize(new Dimension(50,200));

       level_down_b.addActionListener(new Command(Command.button_leveldown,gameScr));

       //定义按钮Level Pause

       Button pause_b =new Button("游戏暂停");

       pause_b.setSize(new Dimension(50,200));

       pause_b.addActionListener(new Command(Command.button_pause,gameScr));

       //定义按钮Quit

       Button quit_b = new Button("退出游戏");

       quit_b.setSize(new Dimension(50,200));

       quit_b.addActionListener(new Command(Command.button_quit,gameScr));

       controlScr.add(play_b);

       controlScr.add(level_up_b);

       controlScr.add(level_down_b);

       controlScr.add(pause_b);

       controlScr.add(quit_b);

       setVisible(true);

       gameScr.requestFocus();

       }

       }

       //重写MyPanel类,使Panel的四周留空间

       class MyPanel extends Panel{

       public Insets getInsets(){

       return new Insets(30,50,30,50);

       }

       }

       //游戏画布类

       class GameCanvas extends Canvas implements KeyListener{

       final int unitSize = 30; //小方块边长

       int rowNum; //正方格的行数

       int columnNum; //正方格的列数

       int maxAllowRowNum; //允许有多少行未削

       int blockInitRow; //新出现块的起始行坐标

       int blockInitCol; //新出现块的起始列坐标

       int [][] scrArr; //屏幕数组

       Block b; //对方快的引用

       //画布类的构造方法

       GameCanvas(){

       rowNum = 15;

       columnNum = 10;

       maxAllowRowNum = rowNum - 2;

       b = new Block(this);

       blockInitRow = rowNum - 1;

       blockInitCol = columnNum/2 - 2;

       scrArr = new int [32][32];

       }

       //初始化屏幕,并将屏幕数组清零的方法

       void initScr(){

       for(int i=0;i<rowNum;i++)

       for (int j=0; j<columnNum;j++)

       scrArr[j]=0;

       b.reset();

       repaint();

       }

       //重新刷新画布方法

       public void paint(Graphics g){

       for(int i = 0; i < rowNum; i++)

       for(int j = 0; j < columnNum; j++)

       drawUnit(i,j,scrArr[j]);

       }

       //画方块的方法

       public void drawUnit(int row,int col,int type){

       scrArr[row][col] = type;

       Graphics g = getGraphics();

       tch(type){ //表示画方快的方法

       case 0: g.setColor(Color.black);break; //以背景为颜色画

       case 1: g.setColor(Color.blue);break; //画正在下落的方块

       case 2: g.setColor(Color.magenta);break; //画已经落下的方法

       }

       g.fill3DRect(col*unitSize,getSize().height-(row+1)*unitSize,unitSize,unitSize,true);

       g.dispose();

       }

       public Block getBlock(){

       return b; //返回block实例的引用

       }

       //返回屏幕数组中(row,col)位置的属性值

       public int getScrArrXY(int row,int col){

       if (row < 0 || row >= rowNum || col < 0 || col >= columnNum)

       return(-1);

       else

       return(scrArr[row][col]);

       }

       //返回新块的初始行坐标方法

       public int getInitRow(){

       return(blockInitRow); //返回新块的初始行坐标

       }

       //返回新块的初始列坐标方法

       public int getInitCol(){

       return(blockInitCol); //返回新块的初始列坐标

       }

       //满行删除方法

       void deleteFullLine(){

       int full_line_num = 0;

       int k = 0;

       for (int i=0;i<rowNum;i++){

       boolean isfull = true;

       L1:for(int j=0;j<columnNum;j++)

       if(scrArr[j] == 0){

       k++;

       isfull = false;

       break L1;

       }

       if(isfull) full_line_num++;

       if(k!=0 && k-1!=i && !isfull)

       for(int j = 0; j < columnNum; j++){

       if (scrArr[j] == 0)

       drawUnit(k-1,j,0);

       else

       drawUnit(k-1,j,2);

       scrArr[k-1][j] = scrArr[j];

       }

       }

       for(int i = k-1 ;i < rowNum; i++){

       for(int j = 0; j < columnNum; j++){

       drawUnit(i,j,0);

       scrArr[j]=0;

       }

       }

       ERS_Block.score += full_line_num;

       ERS_Block.scoreField.setText(""+ERS_Block.score);

       }

       //判断游戏是否结束方法

       boolean isGameEnd(){

       for (int col = 0 ; col <columnNum; col ++){

       if(scrArr[maxAllowRowNum][col] !=0)

       return true;

       }

       return false;

       }

       public void keyTyped(KeyEvent e){

       }

       public void keyReleased(KeyEvent e){

       }

       //处理键盘输入的方法

       public void keyPressed(KeyEvent e){

       if(!ERS_Block.isPlay)

       return;

       tch(e.getKeyCode()){

       case KeyEvent.VK_DOWN:b.fallDown();break;

       case KeyEvent.VK_LEFT:b.leftMove();break;

       case KeyEvent.VK_RIGHT:b.rightMove();break;

       case KeyEvent.VK_SPACE:b.leftTurn();break;

       }

       }

       }

       //处理控制类

       class Command implements ActionListener{

       static final int button_play = 1; //给按钮分配编号

       static final int button_levelup = 2;

       static final int button_leveldown = 3;

       static final int button_quit = 4;

       static final int button_pause = 5;

       static boolean pause_resume = true;

       int curButton; //当前按钮

       GameCanvas scr;

       //控制按钮类的构造方法

       Command(int button,GameCanvas scr){

       curButton = button;

       this.scr=scr;

       }

       //按钮执行方法

       public void actionPerformed (ActionEvent e){

       tch(curButton){

       case button_play:if(!ERS_Block.isPlay){

       scr.initScr();

       ERS_Block.isPlay = true;

       ERS_Block.score = 0;

       ERS_Block.scoreField.setText("0");

       ERS_Block.timer.resume();

       }

       scr.requestFocus();

       break;

       case button_levelup:if(ERS_Block.level < 10){

       ERS_Block.level++;

       ERS_Block.levelField.setText(""+ERS_Block.level);

       ERS_Block.score = 0;

       ERS_Block.scoreField.setText(""+ERS_Block.score);

       }

       scr.requestFocus();

       break;

       case button_leveldown:if(ERS_Block.level > 1){

       ERS_Block.level--;

       ERS_Block.levelField.setText(""+ERS_Block.level);

       ERS_Block.score = 0;

       ERS_Block.scoreField.setText(""+ERS_Block.score);

       }

       scr.requestFocus();

       break;

       case button_pause:if(pause_resume){

       ERS_Block.timer.suspend();

       pause_resume = false;

       }else{

       ERS_Block.timer.resume();

       pause_resume = true;

       }

       scr.requestFocus();

       break;

       case button_quit:System.exit(0);

       }

       }

       }

       //方块类

       class Block {

       static int[][] pattern = {

       {0x0f00,0x4444,0x0f00,0x4444},//用十六进至表示,本行表示长条四种状态

       {0x04e0,0x0464,0x00e4,0x04c4},

       {0x4620,0x6c00,0x4620,0x6c00},

       {0x2640,0xc600,0x2640,0xc600},

       {0x6220,0x1700,0x2230,0x0740},

       {0x6440,0x0e20,0x44c0,0x8e00},

       {0x0660,0x0660,0x0660,0x0660}

       };

       int blockType; //块的模式号(0-6)

       int turnState; //块的翻转状态(0-3)

       int blockState; //快的下落状态

       int row,col; //块在画布上的坐标

       GameCanvas scr;

       //块类的构造方法

       Block(GameCanvas scr){

       this.scr = scr;

       blockType = (int)(Math.random() * 1000)%7;

       turnState = (int)(Math.random() * 1000)%4;

       blockState = 1;

       row = scr.getInitRow();

       col = scr.getInitCol();

       }

       //重新初始化块,并显示新块

       public void reset(){

       blockType = (int)(Math.random() * 1000)%7;

       turnState = (int)(Math.random() * 1000)%4;

       blockState = 1;

       row = scr.getInitRow();

       col = scr.getInitCol();

       dispBlock(1);

       }

       //实现“块”翻转的方法

       public void leftTurn(){

       if(assertValid(blockType,(turnState + 1)%4,row,col)){

       dispBlock(0);

       turnState = (turnState + 1)%4;

       dispBlock(1);

       }

       }

       //实现“块”的左移的方法

       public void leftMove(){

       if(assertValid(blockType,turnState,row,col-1)){

       dispBlock(0);

       col--;

       dispBlock(1);

       }

       }

       //实现块的右移

       public void rightMove(){

       if(assertValid(blockType,turnState,row,col+1)){

       dispBlock(0);

       col++;

       dispBlock(1);

       }

       }

       //实现块落下的操作的方法

       public boolean fallDown(){

       if(blockState == 2)

       return(false);

       if(assertValid(blockType,turnState,row-1,col)){

       dispBlock(0);

       row--;

       dispBlock(1);

       return(true);

       }else{

       blockState = 2;

       dispBlock(2);

       return(false);

       }

       }

       //判断是否正确的方法

       boolean assertValid(int t,int s,int row,int col){

       int k = 0x8000;

       for(int i = 0; i < 4; i++){

       for(int j = 0; j < 4; j++){

       if((int)(pattern[t][s]&k) != 0){

       int temp = scr.getScrArrXY(row-i,col+j);

       if (temp<0||temp==2)

       return false;

       }

       k = k >> 1;

       }

       }

       return true;

       }

       //同步显示的方法

       public synchronized void dispBlock(int s){

       int k = 0x8000;

       for (int i = 0; i < 4; i++){

       for(int j = 0; j < 4; j++){

       if(((int)pattern[blockType][turnState]&k) != 0){

       scr.drawUnit(row-i,col+j,s);

       }

       k=k>>1;

       }

       }

       }

       }

       //定时线程

       class MyTimer extends Thread{

       GameCanvas scr;

       public MyTimer(GameCanvas scr){

       this.scr = scr;

       }

       public void run(){

       while(true){

       try{

       sleep((10-ERS_Block.level + 1)*100);

       }

       catch(InterruptedException e){}

       if(!scr.getBlock().fallDown()){

       scr.deleteFullLine();

       if(scr.isGameEnd()){

       ERS_Block.isPlay = false;

       suspend();

       }else

       scr.getBlock().reset();

       }

       }

       }

       }

       class WinListener extends WindowAdapter{

       public void windowClosing (WindowEvent l){

       System.exit(0);

       }

       }

c语言小游戏代码

       连连看的小源码

       package Lianliankan;

       import javax.swing.*;

       import java.awt.*;

       import java.awt.event.*;

       public class lianliankan implements ActionListener

       {

       JFrame mainFrame; //主面板

       Container thisContainer;

       JPanel centerPanel,southPanel,northPanel; //子面板

       JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组

       JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮

       JLabel fractionLable=new JLabel("0"); //分数标签

       JButton firstButton,secondButton; //分别记录两次被选中的按钮

       int grid[][] = new int[8][7];//储存游戏按钮位置

       static boolean pressInformation=false; //判断是否有按钮被选中

       int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标

       int i,j,k,n;//消除方法控制

       public void init(){

       mainFrame=new JFrame("JKJ连连看");

       thisContainer = mainFrame.getContentPane();

       thisContainer.setLayout(new BorderLayout());

       centerPanel=new JPanel();

       southPanel=new JPanel();

       northPanel=new JPanel();

       thisContainer.add(centerPanel,"Center");

       thisContainer.add(southPanel,"South");

       thisContainer.add(northPanel,"North");

       centerPanel.setLayout(new GridLayout(6,5));

       for(int cols = 0;cols < 6;cols++){

       for(int rows = 0;rows < 5;rows++ ){

       diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1]));

       diamondsButton[cols][rows].addActionListener(this);

       centerPanel.add(diamondsButton[cols][rows]);

       }

       }

       exitButton=new JButton("退出");

       exitButton.addActionListener(this);

       resetButton=new JButton("重列");

       resetButton.addActionListener(this);

       newlyButton=new JButton("再来一局");

       newlyButton.addActionListener(this);

       southPanel.add(exitButton);

       southPanel.add(resetButton);

       southPanel.add(newlyButton);

       fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));

       northPanel.add(fractionLable);

       mainFrame.setBounds(280,100,500,450);

       mainFrame.setVisible(true);

       }

       public void randomBuild() {

       int randoms,cols,rows;

       for(int twins=1;twins<=15;twins++) {

       randoms=(int)(Math.random()*25+1);

       for(int alike=1;alike<=2;alike++) {

       cols=(int)(Math.random()*6+1);

       rows=(int)(Math.random()*5+1);

       while(grid[cols][rows]!=0) {

       cols=(int)(Math.random()*6+1);

       rows=(int)(Math.random()*5+1);

       }

       this.grid[cols][rows]=randoms;

       }

       }

       }

       public void fraction(){

       fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));

       }

       public void reload() {

       int save[] = new int[30];

       int n=0,cols,rows;

       int grid[][]= new int[8][7];

       for(int i=0;i<=6;i++) {

       for(int j=0;j<=5;j++) {

       if(this.grid[i][j]!=0) {

       save[n]=this.grid[i][j];

       n++;

       }

       }

       }

       n=n-1;

       this.grid=grid;

       while(n>=0) {

       cols=(int)(Math.random()*6+1);

       rows=(int)(Math.random()*5+1);

       while(grid[cols][rows]!=0) {

       cols=(int)(Math.random()*6+1);

       rows=(int)(Math.random()*5+1);

       }

       this.grid[cols][rows]=save[n];

       n--;

       }

       mainFrame.setVisible(false);

       pressInformation=false; //这里一定要将按钮点击信息归为初始

       init();

       for(int i = 0;i < 6;i++){

       for(int j = 0;j < 5;j++ ){

       if(grid[i+1][j+1]==0)

       diamondsButton[i][j].setVisible(false);

       }

       }

       }

       public void estimateEven(int placeX,int placeY,JButton bz) {

       if(pressInformation==false) {

       x=placeX;

       y=placeY;

       secondMsg=grid[x][y];

       secondButton=bz;

       pressInformation=true;

       }

       else {

       x0=x;

       y0=y;

       fristMsg=secondMsg;

       firstButton=secondButton;

       x=placeX;

       y=placeY;

       secondMsg=grid[x][y];

       secondButton=bz;

       if(fristMsg==secondMsg && secondButton!=firstButton){

       xiao();

       }

       }

       }

       public void xiao() { //相同的情况下能不能消去。仔细分析,不一条条注释

       if((x0==x &&(y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)&&(y0==y))){ //判断是否相邻

       remove();

       }

       else{

       for (j=0;j<7;j++ ) {

       if (grid[x0][j]==0){ //判断第一个按钮同行哪个按钮为空

       if (y>j) { //如果第二个按钮的Y坐标大于空按钮的Y坐标说明第一按钮在第二按钮左边

       for (i=y-1;i>=j;i-- ){ //判断第二按钮左侧直到第一按钮中间有没有按钮

       if (grid[x][i]!=0) {

       k=0;

       break;

       }

       else{ k=1; } //K=1说明通过了第一次验证

       }

       if (k==1) {

       linePassOne();

       }

       }

       if (y<j){ //如果第二个按钮的Y坐标小于空按钮的Y坐标说明第一按钮在第二按钮右边

       for (i=y+1;i<=j ;i++ ){ //判断第二按钮左侧直到第一按钮中间有没有按钮

       if (grid[x][i]!=0){

       k=0;

       break;

       }

       else { k=1; }

       }

       if (k==1){

       linePassOne();

       }

       }

       if (y==j ) {

       linePassOne();

       }

       }

       if (k==2) {

       if (x0==x) {

       remove();

       }

       if (x0<x) {

       for (n=x0;n<=x-1;n++ ) {

       if (grid[n][j]!=0) {

       k=0;

       break;

       }

       if(grid[n][j]==0 && n==x-1) {

       remove();

       }

       }

       }

       if (x0>x) {

       for (n=x0;n>=x+1 ;n-- ) {

       if (grid[n][j]!=0) {

       k=0;

       break;

       }

       if(grid[n][j]==0 && n==x+1) {

       remove();

       }

       }

       }

       }

       }

       for (i=0;i<8;i++ ) { //列

       if (grid[i][y0]==0) {

       if (x>i) {

       for (j=x-1;j>=i ;j-- ) {

       if (grid[j][y]!=0) {

       k=0;

       break;

       }

       else { k=1; }

       }

       if (k==1) {

       rowPassOne();

       }

       }

       if (x<i) {

       for (j=x+1;j<=i;j++ ) {

       if (grid[j][y]!=0) {

       k=0;

       break;

       }

       else { k=1; }

       }

       if (k==1) {

       rowPassOne();

       }

       }

       if (x==i) {

       rowPassOne();

       }

       }

       if (k==2){

       if (y0==y) {

       remove();

       }

       if (y0<y) {

       for (n=y0;n<=y-1 ;n++ ) {

       if (grid[i][n]!=0) {

       k=0;

       break;

       }

       if(grid[i][n]==0 && n==y-1) {

       remove();

       }

       }

       }

       if (y0>y) {

       for (n=y0;n>=y+1 ;n--) {

       if (grid[i][n]!=0) {

       k=0;

       break;

       }

       if(grid[i][n]==0 && n==y+1) {

       remove();

       }

       }

       }

       }

       }

       }

       }

       public void linePassOne(){

       if (y0>j){ //第一按钮同行空按钮在左边

       for (i=y0-1;i>=j ;i-- ){ //判断第一按钮同左侧空按钮之间有没按钮

       if (grid[x0][i]!=0) {

       k=0;

       break;

       }

       else { k=2; } //K=2说明通过了第二次验证

       }

       }

       if (y0<j){ //第一按钮同行空按钮在与第二按钮之间

       for (i=y0+1;i<=j ;i++){

       if (grid[x0][i]!=0) {

       k=0;

       break;

       }

       else{ k=2; }

       }

       }

       }

       public void rowPassOne(){

       if (x0>i) {

       for (j=x0-1;j>=i ;j-- ) {

       if (grid[j][y0]!=0) {

       k=0;

       break;

       }

       else { k=2; }

       }

       }

       if (x0<i) {

       for (j=x0+1;j<=i ;j++ ) {

       if (grid[j][y0]!=0) {

       k=0;

       break;

       }

       else { k=2; }

       }

       }

       }

       public void remove(){

       firstButton.setVisible(false);

       secondButton.setVisible(false);

       fraction();

       pressInformation=false;

       k=0;

       grid[x0][y0]=0;

       grid[x][y]=0;

       }

       public void actionPerformed(ActionEvent e) {

       if(e.getSource()==newlyButton){

       int grid[][] = new int[8][7];

       this.grid = grid;

       randomBuild();

       mainFrame.setVisible(false);

       pressInformation=false;

       init();

       }

       if(e.getSource()==exitButton)

       System.exit(0);

       if(e.getSource()==resetButton)

       reload();

       for(int cols = 0;cols < 6;cols++){

       for(int rows = 0;rows < 5;rows++ ){

       if(e.getSource()==diamondsButton[cols][rows])

       estimateEven(cols+1,rows+1,diamondsButton[cols][rows]);

       }

       }

       }

       public static void main(String[] args) {

       lianliankan llk = new lianliankan();

       llk.randomBuild();

       llk.init();

       }

       }

       //old 998 lines

       //new 318 lines

求经典小游戏(五子棋 贪吃蛇 俄罗斯方块等)c++ 源代码。最好能有软件设计过程 我想学思路

       最基础的贪吃蛇的代码

       #include<stdio.h>

       #include<windows.h>//基本型态定义。支援型态定义函数。使用者界面函数 图形装置界面函数。

       #include<conio.h> //用户通过按键盘产生的对应操作 (控制台)

       #include<stdlib.h>

       #include<time.h> //日期和时间头文件

       #define LEN 30

       #define WID 25

       int Snake[LEN][WID] = {0}; //数组的元素代表蛇的各个部位

       char Sna_Hea_Dir = 'a';//记录蛇头的移动方向

       int Sna_Hea_X, Sna_Hea_Y;//记录蛇头的位置

       int Snake_Len = 3;//记录蛇的长度

       clock_t Now_Time;//记录当前时间,以便自动移动

       int Wait_Time ;//记录自动移动的时间间隔

       int Eat_Apple = 1;//吃到苹果表示为1

       int Level ;

       int All_Score = -1;

       int Apple_Num = -1;

       HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); //获取标准输出的句柄 <windows.h>

       //句柄 :标志应用程序中的不同对象和同类对象中的不同的实例 方便操控,

       void gotoxy(int x, int y)//设置光标位置

        {

        COORD pos = {x,y}; //定义一个字符在控制台屏幕上的坐标POS

        SetConsoleCursorPosition(hConsole, pos); //定位光标位置的函数<windows.h>

       }

       void Hide_Cursor()//隐藏光标 固定函数

        {

        CONSOLE_CURSOR_INFO cursor_info = {1, 0};

        SetConsoleCursorInfo(hConsole, &cursor_info);

        }

       void SetColor(int color)//设置颜色

        {

        SetConsoleTextAttribute(hConsole, color);

       //是API设置字体颜色和背景色的函数 格式:SetConsoleTextAttribute(句柄,颜色);

        }

       void Print_Snake()//打印蛇头和蛇的脖子和蛇尾

        {

        int iy, ix, color;

        for(iy = 0; iy < WID; ++iy)

        for(ix = 0; ix < LEN; ++ix)

        {

        if(Snake[ix][iy] == 1)//蛇头

        {

        SetColor(0xf); //oxf代表分配的内存地址 setcolor:34行自定义设置颜色的函数

        gotoxy(ix*2, iy);

        printf("※");

        }

        if(Snake[ix][iy] == 2)//蛇的脖子

        {

        color = rand()%15 + 1; //rand()函数是产生随机数的一个随机函数。C语言里还有 srand()函数等。

       //头文件:stdlib.h

        if(color == 14)

        color -= rand() % 13 + 1; //变色

        SetColor(color);

        gotoxy(ix*2, iy);

        printf("■");

        }

        if(Snake[ix][iy] == Snake_Len)

        {

        gotoxy(ix*2, iy);

        SetColor(0xe);

        printf("≈");

        }

        }

        }

       void Clear_Snake()//擦除贪吃蛇

        {

        int iy, ix;

        for(iy = 0; iy < WID; ++iy)

        for(ix = 0; ix < LEN; ++ix)

        {

        gotoxy(ix*2, iy);

        if(Snake[ix][iy] == Snake_Len)

        printf(" ");

        }

        }

       void Rand_Apple()//随机产生苹果

        {

        int ix, iy;

        do

        {

        ix = rand() % LEN;

        iy = rand() % WID;

        }while(Snake[ix][iy]);

        Snake[ix][iy] = -1;

        gotoxy(ix*2, iy);

        printf("⊙");

        Eat_Apple = 0;

        }

       void Game_Over()//蛇死掉了

        {

        gotoxy(30, 10);

        printf("Game Over");

        Sleep(3000);

        system("pause > nul");

        exit(0);

        }

       void Move_Snake()//让蛇动起来

        {

        int ix, iy;

        for(ix = 0; ix < LEN; ++ix)//先标记蛇头

        for(iy = 0; iy < WID; ++iy)

        if(Snake[ix][iy] == 1)

        {

        switch(Sna_Hea_Dir)//根据新的蛇头方向标志蛇头

        {

        case 'w':

        if(iy == 0)

        Game_Over();

        else

        Sna_Hea_Y = iy - 1;

        Sna_Hea_X = ix;

        break;

        case 's':

        if(iy == (WID -1))

        Game_Over();

        else

        Sna_Hea_Y = iy + 1;

        Sna_Hea_X = ix;

        break;

        case 'a':

        if(ix == 0)

        Game_Over();

        else

        Sna_Hea_X = ix - 1;

        Sna_Hea_Y = iy;

        break;

        case 'd':

        if(ix == (LEN - 1))

        Game_Over();

        else

        Sna_Hea_X = ix + 1;

        Sna_Hea_Y = iy;

        break;

        default:

        break;

        }

        }

        if(Snake[Sna_Hea_X][Sna_Hea_Y]!=1&&Snake[Sna_Hea_X][Sna_Hea_Y]!=0&&Snake[Sna_Hea_X][Sna_Hea_Y]!=-1)

        Game_Over();

        if(Snake[Sna_Hea_X][Sna_Hea_Y] < 0)//吃到苹果

        {

        ++Snake_Len;

        Eat_Apple = 1;

        }

        for(ix = 0; ix < LEN; ++ix)//处理蛇尾

        for(iy = 0; iy < WID; ++iy)

        {

        if(Snake[ix][iy] > 0)

        {

        if(Snake[ix][iy] != Snake_Len)

        Snake[ix][iy] += 1;

        else

        Snake[ix][iy] = 0;

        }

        }

       Snake[Sna_Hea_X][Sna_Hea_Y] = 1;//处理蛇头

       }

       void Get_Input()//控制蛇的移动方向

        {

        if(kbhit())

        {

        switch(getch())

        {

        case 87:

        Sna_Hea_Dir = 'w';

        break;

        case 83:

        Sna_Hea_Dir = 's';

        break;

        case 65:

        Sna_Hea_Dir = 'a';

        break;

        case 68:

        Sna_Hea_Dir = 'd';

        break;

        default:

        break;

        }

        }

        if(clock() - Now_Time >= Wait_Time)//蛇到时间自动行走

        {

        Clear_Snake();

        Move_Snake();

        Print_Snake();

        Now_Time = clock();

        }

        }

       void Init()//初始化

        {

        system("title 贪吃毛毛蛇");

        system("mode con: cols=80 lines=25");

        Hide_Cursor();

        gotoxy(61, 4);

        printf("You Score:");

        gotoxy(61, 6);

        printf("You Level:");

        gotoxy(61, 8);

        printf("The Lenght:");

        gotoxy(61, 10);

        printf("The Speed:");

        gotoxy(61, 12);

        printf("Apple Num:");

        int i;

        for(i = 0; i < Snake_Len; ++i)//生成蛇

        Snake[10+i][15] = i+1;

        int iy, ix;//打印蛇

        for(iy = 0; iy < WID; ++iy)

        for(ix = 0; ix < LEN; ++ix)

        {

        if(Snake[ix][iy])

        {

        SetColor(Snake[ix][iy]);

        gotoxy(ix*2, iy);

        printf("■");

        }

        }

        }

       void Pri_News()//打印信息

        {

        SetColor(0xe);

        gotoxy(73,4);

        All_Score += Level;

        printf("%3d", All_Score);

        gotoxy(73, 6);

        printf("%3d", Level);

        gotoxy(73, 8);

        printf("%3d",Snake_Len);

        gotoxy(73, 10);

        printf("0.%3ds", Wait_Time/10);

        gotoxy(73, 12);

        printf("%d", Apple_Num);

        }

       void Lev_Sys()//等级系统

        {

        if(((Apple_Num-1) / 10) == Level)

        {

        ++Level;

        if(Wait_Time > 50)

        Wait_Time -= 50;

        else

        if(Wait_Time > 10)

        Wait_Time -= 10;

        else

        Wait_Time -= 1;

        }

       }

       int main(void)

        {

        Init();

        srand((unsigned)time(NULL));//设置随机数的种子

        Now_Time = clock();

        int speed1=1000,speed2,a;

        printf("\n");

        printf("请输入你想要的速度\n");

        scanf("%d",&speed2);

        Level=1;

        Wait_Time=speed1-speed2;

        printf("请输入你想要的苹果数\n");

        scanf("%d",&a);

        while(a--)

        Rand_Apple();

        while(1)

        {

        if(Eat_Apple)

        {

        ++Apple_Num;

        Rand_Apple();

        Lev_Sys();

        Pri_News();

        }

        Get_Input();

        Sleep(10);

        }

        return 0;

        }

(完整word版)纯C语言写的一个小型游戏 源代码

       这有一个最简单的贪吃蛇的控制过程。

       一般对于此类的游戏,都分为控制算法,显示算法,判定算法等几个大部分。

       供参考:

       #include <stdio.h>

       #include <windows.h>

       #include <stdlib.h>

       #include <string.h>

       #include <conio.h>

       #include <time.h> //使用当前时间做种子;

       enum dir{up,down,left,right}; //枚举类型enum dir;

       //围墙;

        void InitFence();

        void OutputF();

        char game[20][20];

        //画框框;

       void InitFence(){

        int i,j;

        for(i=0; i<20; i++)

        for(j=0; j<20; j++){

        if(i==0||i==19||j==0||j==19)

        game[i][j]= '*';

        else game[i][j]= ' ';

        }

       }

       //显示框框;

       void OutputF(){

        int i,j;

        for(i=0; i<20; i++){

        for(j=0; j<20; j++)

        printf("%c ",game[i][j]);

        printf("\n");

        }

       }

        //蛇结点;

       struct SnakeNode{

        int x,y;

        struct SnakeNode *prior,*next;

       }*head=NULL, *tail =NULL;

        void add_head(int x,int y);

        int get_x(struct SnakeNode *p);

        int get_y(struct SnakeNode *p);

        void delete_tail();

       //插入头结点;

       void add_head(int x,int y){

        struct SnakeNode *q= (struct SnakeNode *)malloc(sizeof(struct SnakeNode));

        q->x =x; q->y =y;

        q->next =head;

        q->prior =NULL;

        if(head) head->prior =q;

        head =q;

        if(!tail) tail =head;

        game[x][y]= '*'; //f对象可以在定义Fence类时定义; 且Fence类在SnakeNode类前定义;

       }

       int get_x(struct SnakeNode *p){

        return p->x;

       }

       int get_y(struct SnakeNode *p){

        return p->y;

       }

       //删除尾结点;

       void delete_tail(){

        struct SnakeNode *p =tail;

        game[get_x(tail)][get_y(tail)]= ' ';//把尾结点的坐标表示的'*'置为空格;

        if(tail==head)

        tail= head= NULL;

        else{

        tail= tail->prior;

        tail->next= NULL;

        }

        free(p);

       }

        //move移动;

       struct move{

        enum dir point; //枚举变量point: 控制方向;

        int food_x;

        int food_y;

       };

        void moving(struct move *m);

        void change_point(char,struct move *m); //改变方向;

        void get_food(struct move *m);

       void get_food(struct move *m){

        srand((unsigned int) time(NULL)); //做种子(程序运行时间);

        m->food_x= rand()%18+1;

        m->food_y= rand()%18+1;

        game[m->food_x][m->food_y]= '*';

       }

        void moving(struct move *m){

        int a,b;

        a= get_x(head); //取得头结点横坐标

        b= get_y(head); //头结点纵坐标

        switch(m->point){

        case up: --a; break;

        case down: ++a; break;

        case left: --b; break;

        case right: ++b; break;

        }

        if(a==19||b==19||a==0||b==0){ //判断是否撞墙;

        printf("game over!!!\n");

        exit(0);

        }

        if(a==m->food_x && b==m->food_y){ //吃food;

        add_head(a,b);

        get_food(m);

        }

        else{

        add_head(a,b); //插入头结点;

        delete_tail(); //删除尾结点;

        }

       }

        void change_point(char keydown,struct move *m){

        switch(keydown){

       // case 'w': m->point= up; break;

       // case 's': m->point= down; break;

       // case 'a': m->point= left; break;

       // case 'd': m->point= right; break;

        case 72: m->point= up; break;

        case 80: m->point= down; break;

        case 75: m->point= left; break;

        case 77: m->point= right; break;

        }

       }

        //main();

       int main(){

        struct move m;

        printf("Using 'w,s,a,d'to control direction!!!\n\n\n");

        InitFence();

        add_head(4,3);

        add_head(4,4);

        add_head(4,5);

        get_food(&m);

        OutputF();

        while (1){

        char keydown= getch(); //getch()返回键盘上读取的字符;包含头文件<conio.h>

        change_point(keydown,&m);

        while(!kbhit()){ //判断有没有按键落下;

        system("cls"); //清屏函数;

        moving(&m);

        OutputF();

        Sleep(200);

        }

        }

        return 0;

       }

求java小游戏源代码

       "扫雷"小游戏C代码

       #include<stdio.h>

       #include<math.h>

       #include<time.h>

       #include<stdlib.h>

       main( )

       {char a[102][102],b[102][102],c[102][102],w;

       int i,j; ?/*循环变量*/

       int x,y,z[999]; ?/*雷的位置*/

       int t,s; ?/*标记*/

       int m,n,lei; ?/*计数*/

       int u,v; ?/*输入*/

       int hang,lie,ge,mo; ?/*自定义变量*/

       srand((int)time(NULL)); ?/*启动随机数发生器*/

       leb1:? /*选择模式*/

       printf("\n 请选择模式:\n ?1.标准 ?2.自定义\n");

       scanf("%d",&mo);

       if(mo==2) ?/*若选择自定义模式,要输入三个参数*/

       {do

       {t=0; printf("请输入\n行数 列数 雷的个数\n");

       scanf("%d%d%d",&hang,&lie,&ge);

       if(hang<2){printf("行数太少\n"); t=1;}

       if(hang>100){printf("行数太多\n");t=1;}

       if(lie<2){printf("列数太少\n");t=1;}

       if(lie>100){printf("列数太多\n");t=1;}

       if(ge<1){printf("至少要有一个雷\n");t=1;}

       if(ge>=(hang*lie)){printf("雷太多了\n");t=1;}

       }while(t==1);

       }

       else{hang=10,lie=10,ge=10;}? /*否则就是选择了标准模式(默认参数)*/

       for(i=1;i<=ge;i=i+1)? /*确定雷的位置*/

       {do

       {t=0; z[i]=rand( )%(hang*lie);

       for(j=1;j<i;j=j+1){if(z[i]==z[j]) t=1;}

       }while(t==1);

       }

       for(i=0;i<=hang+1;i=i+1)? /*初始化a,b,c*/

       {for(j=0;j<=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }

       for(i=1;i<=hang;i=i+1)

       {for(j=1;j<=lie;j=j+1) {a[i][j]='+';} }

       for(i=1;i<=ge;i=i+1) ?/*把雷放入c*/

       {x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}

       for(i=1;i<=hang;i=i+1)? /*计算b中数字*/

       {for(j=1;j<=lie;j=j+1)

       {m=48;

       if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;

       if(c[i-1][j]=='#')m=m+1; ?if(c[i+1][j+1]=='#')m=m+1;

       if(c[i][j+1]=='#')m=m+1; ?if(c[i+1][j]=='#')m=m+1;

       if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;

       b[i][j]=m;

       }

       }

       for(i=1;i<=ge;i=i+1) ?/*把雷放入b中*/

       {x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}

       lei=ge; ?/*以下是游戏设计*/

       do

       {leb2:? /*输出*/

       system("cls");printf("\n\n\n\n");

       printf(" ");

       for(i=1;i<=lie;i=i+1)

       {w=(i-1)/10+48; printf("%c",w);

       w=(i-1)%10+48; printf("%c ?",w);

       }

       printf("\n ?|");

       for(i=1;i<=lie;i=i+1){printf("---|");}

       printf("\n");

       for(i=1;i<=hang;i=i+1)

       {w=(i-1)/10+48; printf("%c",w);

       w=(i-1)%10+48; printf("%c |",w);

       for(j=1;j<=lie;j=j+1)

       {if(a[i][j]=='0')printf(" |");

       else printf(" %c |",a[i][j]);

       }

       if(i==2)printf(" 剩余雷个数");

       if(i==3)printf(" %d",lei);

       printf("\n |");

       for(j=1;j<=lie;j=j+1){printf("---|");}

       printf("\n");

       }

       scanf("%d%c%d",&u,&w,&v); ?/*输入*/

       u=u+1,v=v+1;

       if(w!='#'&&a[u][v]=='@')

       goto leb2;

       if(w=='#')

       {if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}

       else if(a[u][v]=='@'){a[u][v]='?'; lei=lei+1;}

       else if(a[u][v]=='?'){a[u][v]='+';}

       goto leb2;

       }

       a[u][v]=b[u][v];

       leb3: ?/*打开0区*/

       t=0;

       if(a[u][v]=='0')

       {for(i=1;i<=hang;i=i+1)

       {for(j=1;j<=lie;j=j+1)

       {s=0;

       if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

       if(a[i-1][j]=='0')s=1; ?if(a[i+1][j-1]=='0')s=1;

       if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

       if(a[i][j-1]=='0')s=1; ?if(a[i][j+1]=='0')s=1;

       if(s==1)a[i][j]=b[i][j];

       }

       }

       for(i=1;i<=hang;i=i+1)

       {for(j=lie;j>=1;j=j-1)

       {s=0;

       if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

       if(a[i-1][j]=='0')s=1; ?if(a[i+1][j-1]=='0')s=1;

       if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

       if(a[i][j-1]=='0')s=1; if(a[i][j+1]=='0')s=1;

       if(s==1)a[i][j]=b[i][j];

       }

       }

       for(i=hang;i>=1;i=i-1)

       {for(j=1;j<=lie;j=j+1)

       {s=0;

       if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

       if(a[i-1][j]=='0')s=1; ?if(a[i+1][j-1]=='0')s=1;

       if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;

       if(a[i][j-1]=='0')s=1; ?if(a[i][j+1]=='0')s=1;

       if(s==1)a[i][j]=b[i][j];

       }

       }

       for(i=hang;i>=1;i=i-1)

       {for(j=lie;j>=1;j=j-1)

       {s=0;

       if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;

       if(a[i-1][j]=='0')s=1; ?if(a[i+1][j-1]=='0')s=1;

       if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;

       if(a[i][j-1]=='0')s=1;? if(a[i][j+1]=='0')s=1;

       if(s==1)a[i][j]=b[i][j];

       }

       }

       for(i=1;i<=hang;i=i+1) ?/*检测0区*/

       {for(j=1;j<=lie;j=j+1)

       {if(a[i][j]=='0')

       {if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1;

       if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1;

       if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1;

       if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1;

       if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1;

       if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1;

       if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1;

       if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1;

       }

       }

       }

       if(t==1)goto leb3;

       }

       n=0; ?/*检查结束*/

       for(i=1;i<=hang;i=i+1)

       {for(j=1;j<=lie;j=j+1)

       {if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='?')n=n+1;}

       }

       }

       while(a[u][v]!='#'&&n!=(hang*lie-ge));

       for(i=1;i<=ge;i=i+1) ?/*游戏结束*/

       {x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }

       printf(" ");

       for(i=1;i<=lie;i=i+1)

       {w=(i-1)/10+48; printf("%c",w);

       w=(i-1)%10+48; printf("%c ?",w);

       }

       printf("\n ?|");

       for(i=1;i<=lie;i=i+1){printf("---|");}

       printf("\n");

       for(i=1;i<=hang;i=i+1)

       {w=(i-1)/10+48; printf("%c",w);

       w=(i-1)%10+48; printf("%c |",w);

       for(j=1;j<=lie;j=j+1)

       {if(a[i][j]=='0')printf(" |");

       else ?printf(" %c |",a[i][j]);

       }

       if(i==2)printf(" 剩余雷个数");

       if(i==3)printf(" %d",lei); printf("\n |");

       for(j=1;j<=lie;j=j+1) {printf("---|");}

       printf("\n");

       }

       if(n==(hang*lie-ge)) printf("你成功了!\n");

       else printf(" 游戏结束!\n");

       printf(" 重玩请输入1\n");

       t=0;

       scanf("%d",&t);

       if(t==1)goto leb1;

       }

       /*注:在DEV c++上运行通过。行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入0a9三个字符再按回车键。3行7列不是雷,则输入3a7回车;第8行第5列是雷,就输入8#5回车,9行0列是雷则输入9#0并回车*/

       表1. CheckerDrag.java

       // CheckerDrag.javaimport java.awt.*;import java.awt.event.*;public class CheckerDrag extends java.applet.Applet{ // Dimension of checkerboard square. // 棋盘上每个小方格的尺寸 final static int SQUAREDIM = 40; // Dimension of checkerboard -- includes black outline. // 棋盘的尺寸 – 包括黑色的轮廓线 final static int BOARDDIM = 8 * SQUAREDIM + 2; // Dimension of checker -- 3/4 the dimension of a square. // 棋子的尺寸 – 方格尺寸的3/4 final static int CHECKERDIM = 3 * SQUAREDIM / 4; // Square colors are dark green or white. // 方格的颜色为深绿色或者白色 final static Color darkGreen = new Color (0, 128, 0); // Dragging flag -- set to true when user presses mouse button over checker // and cleared to false when user releases mouse button. // 拖动标记 --当用户在棋子上按下鼠标按键时设为true, // 释放鼠标按键时设为false boolean inDrag = false; // Left coordinate of checkerboard's upper-left corner. // 棋盘左上角的左方向坐标 int boardx; // Top coordinate of checkerboard's upper-left corner. //棋盘左上角的上方向坐标 int boardy; // Left coordinate of checker rectangle origin (upper-left corner). // 棋子矩形原点(左上角)的左方向坐标 int ox; // Top coordinate of checker rectangle origin (upper-left corner). // 棋子矩形原点(左上角)的上方向坐标 int oy; // Left displacement between mouse coordinates at time of press and checker // rectangle origin. // 在按键时的鼠标坐标与棋子矩形原点之间的左方向位移 int relx; // Top displacement between mouse coordinates at time of press and checker // rectangle origin. // 在按键时的鼠标坐标与棋子矩形原点之间的上方向位移 int rely; // Width of applet drawing area. // applet绘图区域的宽度 int width; // Height of applet drawing area. // applet绘图区域的高度 int height; // Image buffer. // 图像缓冲 Image imBuffer; // Graphics context associated with image buffer. // 图像缓冲相关联的图形背景 Graphics imG; public void init () { // Obtain the size of the applet's drawing area. // 获取applet绘图区域的尺寸 width = getSize ().width; height = getSize ().height; // Create image buffer. // 创建图像缓冲 imBuffer = createImage (width, height); // Retrieve graphics context associated with image buffer. // 取出图像缓冲相关联的图形背景 imG = imBuffer.getGraphics (); // Initialize checkerboard's origin, so that board is centered. // 初始化棋盘的原点,使棋盘在屏幕上居中 boardx = (width - BOARDDIM) / 2 + 1; boardy = (height - BOARDDIM) / 2 + 1; // Initialize checker's rectangle's starting origin so that checker is // centered in the square located in the top row and second column from // the left. // 初始化棋子矩形的起始原点,使得棋子在第一行左数第二列的方格里居中 ox = boardx + SQUAREDIM + (SQUAREDIM - CHECKERDIM) / 2 + 1; oy = boardy + (SQUAREDIM - CHECKERDIM) / 2 + 1; // Attach a mouse listener to the applet. That listener listens for // mouse-button press and mouse-button release events. // 向applet添加一个用来监听鼠标按键的按下和释放事件的鼠标监听器 addMouseListener (new MouseAdapter () { public void mousePressed (MouseEvent e) { // Obtain mouse coordinates at time of press. // 获取按键时的鼠标坐标 int x = e.getX (); int y = e.getY (); // If mouse is over draggable checker at time // of press (i.e., contains (x, y) returns // true), save distance between current mouse // coordinates and draggable checker origin // (which will always be positive) and set drag // flag to true (to indicate drag in progress). // 在按键时如果鼠标位于可拖动的棋子上方 // (也就是contains (x, y)返回true),则保存当前 // 鼠标坐标与棋子的原点之间的距离(始终为正值)并且 // 将拖动标志设为true(用来表明正处在拖动过程中) if (contains (x, y)) { relx = x - ox; rely = y - oy; inDrag = true; } } boolean contains (int x, int y) { // Calculate center of draggable checker. // 计算棋子的中心位置 int cox = ox + CHECKERDIM / 2; int coy = oy + CHECKERDIM / 2; // Return true if (x, y) locates with bounds // of draggable checker. CHECKERDIM / 2 is the // radius. // 如果(x, y)仍处于棋子范围内则返回true // CHECKERDIM / 2为半径 return (cox - x) * (cox - x) + (coy - y) * (coy - y) < CHECKERDIM / 2 * CHECKERDIM / 2; } public void mouseReleased (MouseEvent e) { // When mouse is released, clear inDrag (to // indicate no drag in progress) if inDrag is // already set. // 当鼠标按键被释放时,如果inDrag已经为true, // 则将其置为false(用来表明不在拖动过程中) if (inDrag) inDrag = false; } }); // Attach a mouse motion listener to the applet. That listener listens // for mouse drag events. //向applet添加一个用来监听鼠标拖动事件的鼠标运动监听器 addMouseMotionListener (new MouseMotionAdapter () { public void mouseDragged (MouseEvent e) { if (inDrag) { // Calculate draggable checker's new // origin (the upper-left corner of // the checker rectangle). // 计算棋子新的原点(棋子矩形的左上角) int tmpox = e.getX () - relx; int tmpoy = e.getY () - rely; // If the checker is not being moved // (at least partly) off board, // assign the previously calculated // origin (tmpox, tmpoy) as the // permanent origin (ox, oy), and // redraw the display area (with the // draggable checker at the new // coordinates). // 如果棋子(至少是棋子的一部分)没有被 // 移出棋盘,则将之前计算的原点 // (tmpox, tmpoy)赋值给永久性的原点(ox, oy), // 并且刷新显示区域(此时的棋子已经位于新坐标上) if (tmpox > boardx && tmpoy > boardy && tmpox + CHECKERDIM < boardx + BOARDDIM && tmpoy + CHECKERDIM < boardy + BOARDDIM) { ox = tmpox; oy = tmpoy; repaint (); } } } }); } public void paint (Graphics g) { // Paint the checkerboard over which the checker will be dragged. // 在棋子将要被拖动的位置上绘制棋盘 paintCheckerBoard (imG, boardx, boardy); // Paint the checker that will be dragged. // 绘制即将被拖动的棋子 paintChecker (imG, ox, oy); // Draw contents of image buffer. // 绘制图像缓冲的内容 g.drawImage (imBuffer, 0, 0, this); } void paintChecker (Graphics g, int x, int y) { // Set checker shadow color. // 设置棋子阴影的颜色 g.setColor (Color.black); // Paint checker shadow. // 绘制棋子的阴影 g.fillOval (x, y, CHECKERDIM, CHECKERDIM); // Set checker color. // 设置棋子颜色 g.setColor (Color.red); // Paint checker. // 绘制棋子 g.fillOval (x, y, CHECKERDIM - CHECKERDIM / 13, CHECKERDIM - CHECKERDIM / 13); } void paintCheckerBoard (Graphics g, int x, int y) { // Paint checkerboard outline. // 绘制棋盘轮廓线 g.setColor (Color.black); g.drawRect (x, y, 8 * SQUAREDIM + 1, 8 * SQUAREDIM + 1); // Paint checkerboard. // 绘制棋盘 for (int row = 0; row < 8; row++) { g.setColor (((row & 1) != 0) ? darkGreen : Color.white); for (int col = 0; col < 8; col++) { g.fillRect (x + 1 + col * SQUAREDIM, y + 1 + row * SQUAREDIM, SQUAREDIM, SQUAREDIM); g.setColor ((g.getColor () == darkGreen) ? Color.white : darkGreen); } } } // The AWT invokes the update() method in response to the repaint() method // calls that are made as a checker is dragged. The default implementation // of this method, which is inherited from the Container class, clears the // applet's drawing area to the background color prior to calling paint(). // This clearing followed by drawing causes flicker. CheckerDrag overrides // update() to prevent the background from being cleared, which eliminates // the flicker. // AWT调用了update()方法来响应拖动棋子时所调用的repaint()方法。该方法从 // Container类继承的默认实现会在调用paint()之前,将applet的绘图区域清除 // 为背景色,这种绘制之后的清除就导致了闪烁。CheckerDrag重写了update()来 // 防止背景被清除,从而消除了闪烁。 public void update (Graphics g) { paint (g); }}

       非常高兴能与大家分享这些有关“手机小游戏源码”的信息。在今天的讨论中,我希望能帮助大家更全面地了解这个主题。感谢大家的参与和聆听,希望这些信息能对大家有所帮助。