歪胡demo

android | 2016-01-20 20:08:34 | 阅读 1696 次 | 评论(0)
public class MainActivity extends Activity implements OnClickListener {
	private TextView tv;
	private Button bt1;
	private Button bt2;
	private Button bt3;
	private Button bt4;
	private Button bt5;
	private Button bt6;
	private Button bt7;
	private Button bt8;
	private Button bt9;
	private Button bt10;
	private Button bt11;
	private Button bt12;
	private Button bt13;
	private Button bt21;
	private Button bt22;
	private Button bt23;
	private Button bt24;
	private Button bt25;
	private Button bt26;
	private Button bt27;
	private Button bt28;
	private Button bt29;
	private Button bt30;

	private String estr;
	private Jishuan jishuan;
	private String string;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findView();
		setOnListener();
		String string = tv.getText().toString();

	}

	// ///////////////////////////////
	public void waiHu(String string) {
		jishuan = new Jishuan();
		if (jishuan.IsHupai(jishuan.toChangePai(string))) {
			Toast.makeText(this, "恭喜您! 看有息没,有息就胡牌了,别漏了大胡子哟", Toast.LENGTH_LONG)
					.show();
		} else {
			Toast.makeText(this, "不好意思您没有胡牌,继续加油!", Toast.LENGTH_LONG).show();
		}
	}
//
	public void tinPai(String string) {
		jishuan = new Jishuan();
		if (jishuan.IsTinPai(jishuan.toChangePai(string))) {
			Toast.makeText(this, "恭喜您!听牌了, 看有息没!", Toast.LENGTH_LONG).show();
		} else {
			Toast.makeText(this, "不好意思您没有听牌,继续加油!", Toast.LENGTH_LONG).show();
		}
	}

	// //////////////////////////////////////////////////
	private void setOnListener() {
		bt1.setOnClickListener(this);
		bt2.setOnClickListener(this);
		bt3.setOnClickListener(this);
		bt4.setOnClickListener(this);
		bt5.setOnClickListener(this);
		bt6.setOnClickListener(this);
		bt7.setOnClickListener(this);
		bt8.setOnClickListener(this);
		bt9.setOnClickListener(this);
		bt10.setOnClickListener(this);
		bt21.setOnClickListener(this);
		bt22.setOnClickListener(this);
		bt23.setOnClickListener(this);
		bt24.setOnClickListener(this);
		bt25.setOnClickListener(this);
		bt26.setOnClickListener(this);
		bt27.setOnClickListener(this);
		bt28.setOnClickListener(this);
		bt29.setOnClickListener(this);
		bt30.setOnClickListener(this);
		bt11.setOnClickListener(this);
		bt12.setOnClickListener(this);
		bt13.setOnClickListener(this);
	}

	private void findView() {
		tv = (TextView) findViewById(R.id.tv);
		bt1 = (Button) findViewById(R.id.btn1);
		bt2 = (Button) findViewById(R.id.btn2);
		bt3 = (Button) findViewById(R.id.btn3);
		bt4 = (Button) findViewById(R.id.btn4);
		bt5 = (Button) findViewById(R.id.btn5);
		bt6 = (Button) findViewById(R.id.btn6);
		bt7 = (Button) findViewById(R.id.btn7);
		bt8 = (Button) findViewById(R.id.btn8);
		bt9 = (Button) findViewById(R.id.btn9);
		bt10 = (Button) findViewById(R.id.btn10);
		bt11 = (Button) findViewById(R.id.btn11);
		bt12 = (Button) findViewById(R.id.btn12);
		bt13 = (Button) findViewById(R.id.btn13);
		bt21 = (Button) findViewById(R.id.btn21);
		bt22 = (Button) findViewById(R.id.btn22);
		bt23 = (Button) findViewById(R.id.btn23);
		bt24 = (Button) findViewById(R.id.btn24);
		bt25 = (Button) findViewById(R.id.btn25);
		bt26 = (Button) findViewById(R.id.btn26);
		bt27 = (Button) findViewById(R.id.btn27);
		bt28 = (Button) findViewById(R.id.btn28);
		bt29 = (Button) findViewById(R.id.btn29);
		bt30 = (Button) findViewById(R.id.btn30);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn12:
			String myStr = tv.getText().toString();// TextView的字符。
			try {
				tv.setText(myStr.substring(0, myStr.length() - 1));//退回最后一个字符
			} catch (Exception e) {
				tv.setText("");
			}

			break;
		case R.id.btn1:
			String myString1 = tv.getText().toString();
			myString1 += bt1.getText();
			tv.setText(myString1);
			break;
		case R.id.btn2:
			String myString2 = tv.getText().toString();
			myString2 += bt2.getText();
			tv.setText(myString2);
			break;
		case R.id.btn3:
			String myString3 = tv.getText().toString();
			myString3 += bt3.getText();
			tv.setText(myString3);
			break;
		case R.id.btn4:
			String myString4 = tv.getText().toString();
			myString4 += bt4.getText();
			tv.setText(myString4);
			break;
		case R.id.btn5:
			String myString5 = tv.getText().toString();
			myString5 += bt5.getText();
			tv.setText(myString5);
			break;
		case R.id.btn6:
			String myString6 = tv.getText().toString();
			myString6 += bt6.getText();
			tv.setText(myString6);
			break;
		case R.id.btn7:
			String myString7 = tv.getText().toString();
			myString7 += bt7.getText();
			tv.setText(myString7);
			break;
		case R.id.btn8:
			String myString8 = tv.getText().toString();
			myString8 += bt8.getText();
			tv.setText(myString8);
			break;
		case R.id.btn9:
			String myString9 = tv.getText().toString();
			myString9 += bt9.getText();
			tv.setText(myString9);
			break;
		case R.id.btn10:
			String myString10 = tv.getText().toString();
			myString10 += bt10.getText();
			tv.setText(myString10);
			break;
		case R.id.btn21:
			String myString21 = tv.getText().toString();
			myString21 += bt21.getText();
			tv.setText(myString21);
			break;
		case R.id.btn22:
			String myString22 = tv.getText().toString();
			myString22 += bt22.getText();
			tv.setText(myString22);
			break;
		case R.id.btn23:
			String myString23 = tv.getText().toString();
			myString23 += bt23.getText();
			tv.setText(myString23);
			break;
		case R.id.btn24:
			String myString24 = tv.getText().toString();
			myString24 += bt24.getText();
			tv.setText(myString24);
			break;
		case R.id.btn25:
			String myString25 = tv.getText().toString();
			myString25 += bt25.getText();
			tv.setText(myString25);
			break;
		case R.id.btn26:
			String myString26 = tv.getText().toString();
			myString26 += bt26.getText();
			tv.setText(myString26);
			break;
		case R.id.btn27:
			String myString27 = tv.getText().toString();
			myString27 += bt27.getText();
			tv.setText(myString27);
			break;
		case R.id.btn28:
			String myString28 = tv.getText().toString();
			myString28 += bt28.getText();
			tv.setText(myString28);
			break;
		case R.id.btn29:
			String myString29 = tv.getText().toString();
			myString29 += bt29.getText();
			tv.setText(myString29);
			break;
		case R.id.btn30:
			String myString30 = tv.getText().toString();
			myString30 += bt30.getText();
			tv.setText(myString30);
			break;
		case R.id.btn11:
			string = tv.getText().toString();
			waiHu(string);
		case R.id.btn13:
			string = tv.getText().toString();
			tinPai(string);
		}

	}

}
////////////////////////////////////////////////////////////////////////
//计算类
public class Jishuan {
	public final static String[] pai = { "一", "二", "三", "四", "五", "六", "七",
			"八", "九", "十", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖", "拾" };

	// 把相同的牌放在数组的一个下标,便于_del(int[] dealpai )处理。

	public int[] toChangePai(String str) {
		int[] dealpai = new int[20];
		String ch = "";
		int k = str.length();
		for (int i = 0; i < k; i++) {
			ch = str.substring(i, i + 1);
			for (int j = 0; j < 20; j++) {
				if (ch.equals(pai[j])) {
					dealpai[j] = dealpai[j] + 1;
				}
			}
		}
		return dealpai;
	}

	public boolean _del(int[] dealpai) // 此方法有21只牌(增加了1支),不考虑2 7
										// 10的情况。看是否此数组完全清0;
	{
		int i;

		for (i = 0; i < 20; i++) {
			if (dealpai[i] >= 3) {// 大,小字都是三个的情况
				dealpai[i] -= 3;
			}
			if (dealpai[i] == 1 && i < 8) // 处理连续的小字
			{
				if (dealpai[i + 1] > 0 && dealpai[i + 2] > 0) {
					dealpai[i]--;
					dealpai[i + 1]--;
					dealpai[i + 2]--;
				}

			}

			if (dealpai[i] == 2 && i < 8) // 处理连续的小字
			{
				if (dealpai[i + 1] > 1 && dealpai[i + 2] > 1) {
					dealpai[i] -= 2;
					dealpai[i + 1] -= 2;
					dealpai[i + 2] -= 2;
				}

			}

			if (dealpai[i] == 1 && i >= 10 && i < 18) // 处理连续的大字
			{
				if (dealpai[i + 1] > 0 && dealpai[i + 2] > 0) {
					dealpai[i]--;
					dealpai[i + 1]--;
					dealpai[i + 2]--;
				}

			}

			if (dealpai[i] == 2 && i >= 10 && i < 18) // 处理连续的大字
			{
				if (dealpai[i + 1] > 1 && dealpai[i + 2] > 1) {
					dealpai[i] -= 2;
					dealpai[i + 1] -= 2;
					dealpai[i + 2] -= 2;
				}

			}

		}
		int sum = 0;
		for (i = 0; i < 20; i++)
			sum += dealpai[i];
		if (sum == 0) {// 代表此数组为空了。符合条件可以符牌。
			return true;
		} else
			return false;
	}

	// ///////////////////////////////增加一只牌,
	// 数组长度是3的倍数。并处理二七十及贰柒拾,不行就回朔。/////////////////////////////////////////////////
	public boolean IsHupai(int[] dealpai) {

		int[] temp1 = new int[20];
		for (int k = 0; k < 20; k++) { // 保存未作处理的情况。
			temp1[k] = dealpai[k];// a
		}

		for (int j = 0; j < 20; j++) { // 試探增加每張牌,看否能和其他組合成一句話//
										// 或三個相同的數,或2,7,10的组合。

			for (int k = 0; k < 20; k++) { // 还原a上次处理不成功的情况。
				dealpai[k] = temp1[k];
			}

			dealpai[j] = dealpai[j] + 1; // 新增的牌。

			int min = dealpai[1] < dealpai[6] ? dealpai[1] : dealpai[6];
			min = min < dealpai[9] ? min : dealpai[9];// 求小字中二,七,十中最少的那個牌

			int MIN = dealpai[11] < dealpai[16] ? dealpai[11] : dealpai[16];
			MIN = MIN < dealpai[19] ? MIN : dealpai[19]; // 求大字中二,七,十中最少的那個牌

			int[] temp2 = new int[20];
			for (int k = 0; k < 20; k++) { // 保存增加某张牌的当时情况。
				temp2[k] = dealpai[k];
			}

			for (int l = 0; l <= min; l++) {// 以便處理考慮小字2 7 10 的情況。为0时代表不作2710处理。
				for (int m = 0; m < 20; m++) {// 保存处理2710之前时的牌
					dealpai[m] = temp2[m];// 上次不符牌时已修改了。此时还原数组dealpai。
				}
				switch (l) {
				case 1:
					dealpai[1]--;
					dealpai[6]--;
					dealpai[9]--;
					break;// 2,7,10减一
				case 2:
					dealpai[1] -= 2;
					dealpai[6] -= 2;
					dealpai[9] -= 2;
					break;
				default:
					break;
				}
				int[] temp3 = new int[20];
				for (int q = 0; q < 20; q++) {
					temp3[q] = dealpai[q];// 保存还未处理大字2710时的情况
				}
				for (int t = 0; t <= MIN; t++) {// //t 为0时代表不作2710处理。t最多为2。

					for (int n = 0; n < 20; n++) {
						dealpai[n] = temp3[n];// 还原上次修改的。
					}
					switch (t) {
					case 1:
						dealpai[11]--;
						dealpai[16]--;
						dealpai[19]--;
						break;// 大字2,7,10减一
					case 2:
						dealpai[11] -= 2;
						dealpai[16] -= 2;
						dealpai[19] -= 2;
						break;

					default:
						break;
					}
					if (_del(dealpai)) {
						for (int i = 0; i < 20; i++)
							// System.out.println("dealpai: "+dealpai[i]);
							return true;
					}
				}

			}
		}
		return false;
	}

	public boolean IsTinPai(int[] dealpai) {//是否听牌

		int[] temp = new int[20];
		for (int i = 0; i < 20; i++) {
			temp[i] = dealpai[i];// 处理前先保存
		}

		for (int j = 0; j < 20; j++) {// 試探增加每張牌,看是否能符牌;
			
			for (int k = 0; k < 20; k++) { // 还原上次处理不成功的情况。
				dealpai[k] = temp[k];
			}
			
			dealpai[j] = dealpai[j] + 1; 
			if (IsHupai(dealpai)) {
				return true;
			}

		}
		return false;
	}

	// /////////////////////////////////////////////////////////////////////////////////
//
//	public static void main(String[] args) {
//		String strpai = "一二二二三三四五六七七八九十 肆伍陆";
//		Jishuan js = new Jishuan();
//		js.toChangePai(strpai);
//		System.out.println("strpai: " + strpai);
//		if (js.IsHupai(js.toChangePai(strpai))) {
//			System.out.println("ok!");
//		} else {
//			System.out.println("no!");
//		}
//	}

}
//////////////////////////////////////////////////////////////////////

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:maxLength="20"
            android:textSize="30sp" >
        </TextView>
    </TableRow>

    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="fill_parent"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn1"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="一" />

        <Button
            android:id="@+id/btn2"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="二" />

        <Button
            android:id="@+id/btn3"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="三" />

        <Button
            android:id="@+id/btn4"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="四" />

        <Button
            android:id="@+id/btn5"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="五" />
    </TableRow>

    <TableRow
        android:id="@+id/tableRow3"
        android:layout_width="0dip"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/btn6"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="六" />

        <Button
            android:id="@+id/btn7"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="七" />

        <Button
            android:id="@+id/btn8"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="八" />

        <Button
            android:id="@+id/btn9"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="九" />

        <Button
            android:id="@+id/btn10"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="十" />
    </TableRow>
     <TableRow
        android:id="@+id/tableRow4"
        android:layout_width="fill_parent"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn21"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="壹" />

        <Button
            android:id="@+id/btn22"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="贰" />

        <Button
            android:id="@+id/btn23"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="叁" />

        <Button
            android:id="@+id/btn24"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="肆" />

        <Button
            android:id="@+id/btn25"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="伍" />
    </TableRow>
     <TableRow
        android:id="@+id/tableRow5"
        android:layout_width="fill_parent"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn26"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="陆" />

        <Button
            android:id="@+id/btn27"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="柒" />

        <Button
            android:id="@+id/btn28"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="捌" />

        <Button
            android:id="@+id/btn29"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="玖" />

        <Button
            android:id="@+id/btn30"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="拾" />
    </TableRow>

    <TableRow
        android:id="@+id/tableRow4"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/btn11"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="是否胡牌" />
        <Button
            android:id="@+id/btn13"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="是否听牌" />

        <Button
            android:id="@+id/btn12"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="x" />
    </TableRow>

</TableLayout>
/////////////////////////////////////////////////////////////
文章评论,共0条
游客请输入验证码
浏览175765次
最新评论
  • zhouwenyuan:博主可以开发房产APP吗?
  • qunxingw:结合附件,在分表A或B...实验一下宏就理解了
  • qunxingw:这仅是小范围的一种思路,此题是指数级的数据。