技术帮
 

面向对象练习_游戏题

本网站内容基本都是原创作品,未得到作者同意也欢迎转载
转载请注明出处:技术帮
说你呢,赶紧长按二维码,然后点击识别图中二维码

任何技术难题可进QQ群提问:【小崔说编程
对于提问的原则是:没有你不能问的,只有我不会答的

感觉很多新人都不知道怎么学习软件开发,个人感觉还是因为练习做的太少,软件开发知识想看懂太难了,必须是边读资料边动手练习。莫说是新人,Java老人研究新技术的时候也是边读资料边练习。因此整理和编排了一系列的练习题,希望对新人学习有帮助。


1473058358717068189.png 游戏:猜中就归你

模拟电视购物节目中的猜商品价格的游戏,猜错了告知高了或低了,猜对了就说恭喜答对了,该电视机归您了。

游戏随机在2000元--3000元之间生成一个动态钱数,要求必须为整数;

有10次竞猜机会;

每猜一次都要告知高了或低了,并说明还有几次机会。

猜中则提示:价值****元的液晶电视机归您了。

10次后仍然没猜对,则提示:很遗憾,您与价值****元的液晶电视机只有***元的距离。

***元是指最接近一次猜测数字差。

public class CaiPrice {
    
    /**
     * 商品价格,每次随机生成
     * 要求2000--3000
     */
    private int price;
    
    /**
     * 记录最小差值
     */
    private int minDiff=-1;
    
    /**
     * 记录最后一次猜测的价格
     */
    private int lastPrice;
    
    /**
     * 记录已经猜测的几次
     */
    private int count=0;
    
    /**
     * 最多猜测几次
     */
    private final int maxCount=10;
    
    /**
     * 开始游戏
     */
    public void play(){
        start();
        
        init();
        while(count<maxCount-1){
            startCai();
            caiing();
            endCai();
            
            count++;
        }
        
        end();
    }
    
    /**
     * 开始游戏,显示游戏开始界面
     */
    private void start(){
        System.out.println("开始游戏了。");
    }
    /**
     * 退出游戏,显示退出游戏的界面
     */
    private void end(){
        System.out.println("游戏已结束。");
    }
    
    /**
     * 初始化游戏数据
     */
    private void init(){
        
    }
    
    /**
     * 系统提示玩家开始猜测
     * 要提示玩家:还可以玩几次,请继续
     */
    private void startCai(){
        System.out.println("您还可以再猜3次,请继续");
    }
    /**
     * 猜测中,等待玩家输入猜测的价格
     */
    private void caiing(){
        System.out.print("请再次猜猜多少钱?");
        Scanner sc=new Scanner(System.in);
        String str=sc.nextLine();
        
        
    }
    
    /**
     * 判断玩家是否猜中了
     * 1 猜中,则提示玩家猜中了。
     * 2 猜错了则提示玩家高了,或低了。
     * 3 如果已经是最后一次,要提示玩家:很遗憾,已经没有机会了,您与价值2394元的液晶电视机只有12元的距离。
     */
    private void endCai(){
        System.out.println("很遗憾,您猜高了。");
    }
    

}



游戏:扔色子

定义色子类:

方法:

    随机生成1-6的数字;


定义扔色子游戏类:

方法:

    开始游戏;


游戏说明:

    按n将退出游戏;

    按其他任何键都将扔出色子;

    扔完色子后给用户提示:

        本次扔出*点。该点总共扔出**次,比例为12%,下一次最有可能扔出的是*点。

package com.wskj.oop.game;

import java.text.DecimalFormat;
import java.util.Random;
import java.util.Scanner;

public class SaiZi {
	
	/**
	 * 各点儿出现的次数
	 */
	private int[] pcounts=new int[6];
	
	//是否继续的字符串,接受用户的输入
	private String jixu="";
	
	private Scanner sc=new Scanner(System.in);
		
	public void play(){
		
		
		showStart();
		
		do{
			zhiSai();
			showJixu();
		
		}while(!jixu.equals("n"));
		
		showEnd();
	}
	
	/**
	 * 游戏开局的提示
	 */
	private void showStart(){
		System.out.println("*******************************");
		System.out.println("*                             *");
		System.out.println("*       &  超级大富翁  &      *");
		System.out.println("*                             *");
		System.out.println("*******************************");
		
		System.out.println();
	}
	/**
	 * 退出游戏的提示
	 */
	private void showEnd(){
		System.out.println();
		
		System.out.println("*******************************");
		System.out.println("*                             *");
		System.out.println("*      哦,这一切都结束了     *");
		System.out.println("*                             *");
		System.out.println("*******************************");
	}
	
	/**
	 * 提示用户是否继续游戏
	 */
	private void showJixu(){
		if(getSum()>0){
			
			System.out.println();
			int mp=yuceNext();
			System.out.print("*** 下一次最有可能出现的点数为:"+mp);
			showGailv();
			System.out.println("*** 亲,您还要继续玩儿吗?");
			jixu=sc.nextLine();
		}
	}
	/**
	 * 掷骰子的方法
	 */
	private void zhiSai(){
		if(jixu.equals("n")){
			return;
		}
		
		System.out.println("*** 看庄家我为亲扔出一个豹子六。");

		System.out.print("色子在旋转:"); 
		Random rnd =new Random();
		for(int i=0;i<8;i++){
			System.out.print(rnd.nextInt(6)+1);
			try {
				Thread.sleep(200);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.print("\b");
			
		}
		int shu=rnd.nextInt(6)+1;
		System.out.println(shu);
		
		System.out.println("色子停了:"+shu);
		pcounts[shu-1]++;
		
	}
	
	
	/**
	 * 预测下一次可能出现几点
	 * @return
	 */
	private int yuceNext(){
		// 预测出现次数最少的那个点数
		int yucep=0;
		int minp=-1;
		for(int i=0;i<6;i++){
			if(minp==-1||minp>pcounts[i]){
				minp=pcounts[i];
				yucep=i;
			}
		}
		return yucep+1;
	}
	
	/**
	 * 获取总次数
	 * @return
	 */
	private int getSum(){
		int sum=0;
		for(int i=0;i<6;i++){
			sum+=pcounts[i];
		}
		return sum;
	}
	
	/**
	 * 计算某点出现的比例
	 * @param point
	 * @return
	 */
	private String pbili(int point){
		if(point<1||point>6){
			return "0%";
		}
		
		int cnt=pcounts[point-1];
		int sum=getSum();
		if(sum==0){
			return "0%";
		}
		
		Float f=((float)cnt)/((float)sum)*100;
		
		DecimalFormat df=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
		String p=df.format(f);//format 返回的是字符串
		
		return p+"%";
	}
	/**
	 * 显示概率图
	 */
	private void showGailv(){
		System.out.print("目前的概率图:【");
		
		for(int i=1;i<=6;i++){
			System.out.print(i+":"+pbili(i));
			if(i!=6){
				System.out.print(" | ");
			}
		}
		
		System.out.println("】");
		
	}

}



游戏:电话号码加密

特工Jack为了防止线人的电话号码被人发现,做了一套加密算法,将电话号码都生成了密文。

每位数字都加上5,然后除以9的余数,代替这一位的数字;

再将第1位和第4位交换;

第2位和第3位交换。

请写出加密算法;


 反向数字

定义一个反向数字的类(RevertNumb)

方法:

    翻转数字。该方法接受一个数字参数,返回一个翻转各位的反向数字。

    比如参数为 147,返回值为 741


游戏:我爱画星星

该游戏根据用户的输入选项,在shell窗口中打印各种几何图形的星星。

1 进入游戏

页面提示:

***********欢迎您来到星星的世界************

请选择您想看到的星星图形:

1 直三角

2 倒直三角

3 右燕翅

4 左燕翅

5 燕翅

6 倒燕翅

7 右棱

8 左棱

9 棱

其他 退出


直三角:

*
* *
* * *
* * * *
* * * * *


倒直三角:

* * * * *
* * * *
* * *
* *
*


左燕翅

*
  *
    *
      *
        *



右燕翅

        *
      *
    *
  *
*



燕翅

*               *
  *           *
    *       *
      *   *
        *

燕翅代码:

	/**
	 * 燕翅输出
	 */
	public static void yanchi(int h){
		int w=h*2;
		
		for(int i=0;i<h;i++){
			for(int j=0;j<w;j++){
				if(i==j||j+i==w-2){
					System.out.print("*");
				}else{
					System.out.print(" ");
				}
				
			}
			System.out.println();
		}
	}



倒燕翅

        *
      *   *
    *       *
  *          *
*              *


右菱

*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*


左菱

        *
      * *
    * * *
  * * * *
* * * * *
  * * * *
    * * *
      * *
        *

左棱代码:

	/**
	 * 左棱
	 * @param w
	 */
	public static void zuoleng(int w){
		int h=w*2;
		
		for(int y=0;y<h;y++){
			for(int x=0;x<w;x++){
				if((y<w&&y+x<w)||(y>w&&y>x+w)){
					System.out.print(" ");
				}else{
					System.out.print("*");
				}
			}
			System.out.println();
		}
		
	}



        *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *
  * * * * * * * 
    * * * * * 
      * * *
        *


棱代码:

	/**
	 * 整棱
	 * @param w
	 */
	public static void leng(int w){
		for(int y=0;y<2*w;y++){
			for(int x=0;x<2*w;x++){
				if((y+x<w||y-x>=w-1||x-y>w||y+x>=w*3-1)){
					System.out.print(" ");
				}else{
					System.out.print("*");
				}
			}
			System.out.println();
		}
	}



 游戏:随机九宫格

在九宫格中填入随机的数字,要求横纵都没有重复的数字。并打印输出结果。


 游戏:简化数独

在九宫格填入随机数字,要求横纵、每宫的数字都不重复。


 游戏:随机显示小星星

随机在20*20的空间显示5个X,其他位置显示为.


 游戏:点兵点将

随机输入字符串,然后开始“点兵点将,看谁是我的好兵好将”;

选中的字符出列,剩余的字符继续从当前位置点兵点将。

直到剩余一个字符,直接出列。

最后按照出列顺序输出新的字符串。