作者在 2016-01-20 20:08:34 发布以下内容
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>
/////////////////////////////////////////////////////////////