中国象棋(IOS)

//
//  ViewController.m
//  ChineseChess
//
//  Created by 晚起的蚂蚁 on 2016/11/20.
//  Copyright ? 2016年 晚起的蚂蚁. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()
@property(assign)CGFloat wigth;
@property(assign)CGFloat height;
@property(retain)NSArray* arr1;
@property(retain)NSArray* arr2;

@property BOOL swop;
@property BOOL next;
@property(retain)NSString* selectedButtonTitle;
@property(assign)NSInteger buttonTag;
@property(assign)float alpha;
@property(retain)UIColor* backgroundColor;//正常棋子的背景颜色
@property(retain)UIColor* selectedBackgroundColor;//被选择的棋子的背景颜色  改为白色
@property(retain)UIColor* selectedButtonTitleColor;//记录被选择棋子的字体颜色
@property(retain)UIColor* red;//红方
@property(retain)UIColor* black;//黑方

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    _alpha=0.025;
    _selectedBackgroundColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1];
    _backgroundColor=[UIColor colorWithRed:0.5 green:1 blue:0.5 alpha:1];
    _red=[UIColor colorWithRed:1 green:0 blue:0 alpha:1];
    _black=[UIColor colorWithRed:0 green:0 blue:0 alpha:1];
    _wigth=[UIScreen mainScreen].bounds.size.width;
    _height=[UIScreen mainScreen].bounds.size.height;
    [self Start];
}
-(void)Start{
    _arr1=@[@"車",@"马",@"像",@"仕",@"帅",@"仕",@"像",@"马",@"車"];
    _arr2=@[@"車",@"马",@"象",@"士",@"将",@"士",@"象",@"马",@"車"];
    [self Map];
}
-(void)Map{
    self.view.backgroundColor=[UIColor grayColor];
    UIView* view=[[UIView alloc]initWithFrame:CGRectMake(0, 0, _wigth, 20)];
    view.backgroundColor=[UIColor whiteColor];
    [self.view addSubview:view];
    //棋盘
    UIView* dibu=[[UIView alloc]initWithFrame:CGRectMake(0, _height/4-_wigth/9, _wigth, _wigth+_wigth*2/9)];
    dibu.backgroundColor=[UIColor yellowColor];
    [self.view addSubview:dibu];
    
    UIView* di=[[UIView alloc]initWithFrame:CGRectMake(_wigth/18, _height/4, _wigth*8/9, _wigth)];
    di.backgroundColor=[UIColor brownColor];
    [self.view addSubview:di];
    
    for (int i=0; i<9; i++) {
        UIView* view=[[UIView alloc]initWithFrame:CGRectMake(_wigth/18+i*_wigth/9, _height/4, 2, _wigth*4/9)];
        if (i==0||i==8) {
            view.frame=CGRectMake(_wigth/18+i*_wigth/9, _height/4, 2, _wigth);
        }
        view.backgroundColor=[UIColor whiteColor];
        [self.view addSubview:view];
    }
    for (int i=0; i<10; i++) {
        UIView* view=[[UIView alloc]initWithFrame:CGRectMake(_wigth/18+i*_wigth/9, _height/4+_wigth*5/9, 2, _wigth*4/9)];
        view.backgroundColor=[UIColor whiteColor];
        [self.view addSubview:view];
    }
    for (int i=0; i<10; i++) {
        UIView* view=[[UIView alloc]initWithFrame:CGRectMake(_wigth/18, _height/4+i*_wigth/9, _wigth*8/9, 2)];
        view.backgroundColor=[UIColor whiteColor];
        [self.view addSubview:view];
    }
    //棋子
    for (int i=0; i<10; i++) {
        for (int j=0; j<9; j++) {
            UIButton* btn=[UIButton buttonWithType:UIButtonTypeCustom];
            btn.frame=CGRectMake(j*_wigth/9, _height/4-_wigth/18+i*_wigth/9, _wigth/9-4, _wigth/9-4);
            btn.backgroundColor=_backgroundColor;
            btn.tag=10*i+j+1;
            [self.view addSubview:btn];
            [btn addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
            [btn setTitle:@"" forState:UIControlStateNormal];
            btn.titleLabel.font=[UIFont systemFontOfSize:30];
            btn.layer.masksToBounds=YES;
            btn.layer.cornerRadius=_wigth/18;
            if (i<5) {
                [btn setTitleColor:_red forState:UIControlStateNormal];
            }else{
                [btn setTitleColor:_black forState:UIControlStateNormal];
            }
            if (i==0) {
                [btn setTitle:_arr1[j] forState:UIControlStateNormal];
            }else if (i==9){
                [btn setTitle:_arr2[j] forState:UIControlStateNormal];
            }
            else if (i==3&&btn.tag%2==1) {
                [btn setTitle:@"兵" forState:UIControlStateNormal];
            }else if (i==6&&btn.tag%2==1) {
                [btn setTitle:@"卒" forState:UIControlStateNormal];
            }else if (btn.tag==72||btn.tag==78||btn.tag==22||btn.tag==28) {
                [btn setTitle:@"炮" forState:UIControlStateNormal];
            }else{
                btn.alpha=_alpha;
            }
        }
    }
}
//点击响应事件
-(void)btnAction:(UIButton*)sender{
    if (!_swop&&sender.titleLabel.text.length!=0) {
        if ((!_next&&sender.titleLabel.textColor==_red)||(_next&&sender.titleLabel.textColor==_black))
            [self saveMessage:sender];
    }
    else{
        if (sender.titleLabel.textColor!=_selectedButtonTitleColor) {
            if ([self swopJudge:sender]) {
                [self swopMessage:sender];
                NSLog(@"to->(%ld,%ld)",sender.tag%10,sender.tag/10);
                _swop=NO;
            }
        }else{
            ((UIButton*)[self.view viewWithTag:_buttonTag]).backgroundColor=_backgroundColor;
            if ((!_next&&sender.titleLabel.textColor==_red)||(_next&&sender.titleLabel.textColor==_black))
                [self saveMessage:sender];
        }
    }
}

//储存数据
-(void)saveMessage:(UIButton*)sender{
    _selectedButtonTitle= sender.titleLabel.text;
    _selectedButtonTitleColor= sender.titleLabel.textColor;
    _buttonTag=sender.tag;
     sender.backgroundColor=_selectedBackgroundColor;
    _swop=YES;
    //NSLog(@"tag=%ld ==%@ ==%@",_buttonTag,_selectedButtonTitle,_selectedButtonTitleColor);
    NSLog(@"from:(%ld,%ld)",_buttonTag%10,_buttonTag/10);
}
//交换数据
-(void)swopMessage:(UIButton*)sender{
    [sender setTitle:_selectedButtonTitle forState:UIControlStateNormal];
    sender.titleLabel.text=_selectedButtonTitle;
    [sender setTitleColor:_selectedButtonTitleColor forState:UIControlStateNormal];
    sender.alpha=1;
    
    UIButton* button=(UIButton*)[self.view viewWithTag:_buttonTag];
    [button setTitle:@"" forState:UIControlStateNormal];
    ((UIButton*)[self.view viewWithTag:_buttonTag]).titleLabel.text=@"";
    button.backgroundColor=_backgroundColor;
    button.alpha=_alpha;
    button.titleLabel.textColor=[UIColor yellowColor];
    _next=!_next;
}
//判断是否能交换
-(BOOL)swopJudge:(UIButton*)sender{
    NSInteger buttonTagNumber1=_buttonTag/10;//上下移动
    NSInteger buttonTagNumber2=_buttonTag%10;//左右移动
    NSInteger senderTagNumber1=sender.tag/10;//上下移动
    NSInteger senderTagNumber2=sender.tag%10;//左右移动
    
    NSString* buttonTitle=((UIButton*)[self.view viewWithTag:_buttonTag]).titleLabel.text;
    //红帅
    if ([buttonTitle isEqualToString:@"帅"]){
        if (sender.tag/10<=2&&sender.tag/10>=0&&sender.tag%10<=6&&sender.tag%10>=4){
            if (labs(sender.tag/10-_buttonTag/10)==0&&labs(sender.tag%10-_buttonTag%10)==1){
                return YES;
            }else if (labs(sender.tag/10-_buttonTag/10)==1&&labs(sender.tag%10-_buttonTag%10)==0){
                return YES;
            }
        }
    }
    //黑将
    if ([buttonTitle isEqualToString:@"将"]){
        if (sender.tag/10<=9&&sender.tag/10>=7&&sender.tag%10<=6&&sender.tag%10>=4){
            if (labs(sender.tag/10-_buttonTag/10)==0&&labs(sender.tag%10-_buttonTag%10)==1){
                return YES;
            }else if (labs(sender.tag/10-_buttonTag/10)==1&&labs(sender.tag%10-_buttonTag%10)==0){
                return YES;
            }
        }
    }
    //红像
    if ([buttonTitle isEqualToString:@"像"]) {
        if (labs(sender.tag/10-_buttonTag/10)==2&&labs(sender.tag%10-_buttonTag%10)==2&&sender.tag<50) {
            if (((UIButton*)[self.view viewWithTag:(sender.tag+_buttonTag)/2]).titleLabel.text.length==0) {
                return YES;
            }else{
                NSLog(@"遇到障碍--%@",((UIButton*)[self.view viewWithTag:(sender.tag+_buttonTag)/2]).titleLabel.text );
            }
        }
    }
    //黑象
    if ([buttonTitle isEqualToString:@"象"]) {
        if (labs(sender.tag/10-_buttonTag/10)==2&&labs(sender.tag%10-_buttonTag%10)==2&&sender.tag>50) {
            if (((UIButton*)[self.view viewWithTag:(sender.tag+_buttonTag)/2]).titleLabel.text.length==0) {
                return YES;
            }else{
                NSLog(@"遇到障碍--%@",((UIButton*)[self.view viewWithTag:(sender.tag+_buttonTag)/2]).titleLabel.text );
            }
        }
    }
    //红仕
    if ([buttonTitle isEqualToString:@"仕"]) {
        if (sender.tag==4||sender.tag==6||sender.tag==15||sender.tag==24||sender.tag==26) {
            if (labs(sender.tag/10-_buttonTag/10)==1||labs(sender.tag%10-_buttonTag%10)==1) {
                return YES;
            }
        }
    }
    //黑士
    if ([buttonTitle isEqualToString:@"士"]) {
        if (sender.tag==74||sender.tag==76||sender.tag==85||sender.tag==94||sender.tag==96) {
            if (labs(sender.tag/10-_buttonTag/10)==1||labs(sender.tag%10-_buttonTag%10)==1) {
                return YES;
            }
        }
    }
    //红兵
    if ([buttonTitle isEqualToString:@"兵"]) {
        if (_buttonTag<50) {
            if (_buttonTag/10==sender.tag/10-1&&_buttonTag%10==sender.tag%10)
                return YES;
        }else{
            if (_buttonTag/10==sender.tag/10-1||_buttonTag%10==sender.tag%10+1||_buttonTag%10==sender.tag%10-1)
                return YES;
        }
    }
    //黑卒
    if ([buttonTitle isEqualToString:@"卒"]) {
        if (_buttonTag>50) {
            if (_buttonTag/10==sender.tag/10+1&&_buttonTag%10==sender.tag%10)
                return YES;
        }else{
            if (_buttonTag/10==sender.tag/10+1||_buttonTag%10==sender.tag%10+1||_buttonTag%10==sender.tag%10-1)
                return YES;
        }
    }
    //马
    if ([buttonTitle isEqualToString:@"马"]) {
        if ((labs(sender.tag/10-_buttonTag/10)==2&&labs(sender.tag%10-_buttonTag%10)==1)||(labs(sender.tag/10-_buttonTag/10)==1&&labs(sender.tag%10-_buttonTag%10)==2)) {
            if (labs(sender.tag/10-_buttonTag/10)==2&&labs(sender.tag%10-_buttonTag%10)==1) {
                if (sender.tag/10>_buttonTag/10) {
                    if (((UIButton*)[self.view viewWithTag:(_buttonTag/10+1)*10+_buttonTag%10]).titleLabel.text.length==0) {
                        return YES;
                    }else{
                        NSLog(@"遇到障碍--%@",((UIButton*)[self.view viewWithTag:(_buttonTag/10+1)*10+_buttonTag%10]).titleLabel.text );
                    }
                }else{
                    if (((UIButton*)[self.view viewWithTag:(_buttonTag/10-1)*10+_buttonTag%10]).titleLabel.text.length==0) {
                        return YES;
                    }else{
                        NSLog(@"遇到障碍--%@",((UIButton*)[self.view viewWithTag:(_buttonTag/10-1)*10+_buttonTag%10]).titleLabel.text );
                    }

}
            }else{
                if (sender.tag%10>_buttonTag%10) {
                    if (((UIButton*)[self.view viewWithTag:_buttonTag/10*10+_buttonTag%10+1]).titleLabel.text.length==0) {
                        return YES;
                    }else{
                        NSLog(@"遇到障碍--%@",((UIButton*)[self.view viewWithTag:_buttonTag/10*10+_buttonTag%10+1]).titleLabel.text );
                    }
                }else{
                    if (((UIButton*)[self.view viewWithTag:_buttonTag/10*10+_buttonTag%10-1]).titleLabel.text.length==0) {
                        return YES;
                    }else{
                        NSLog(@"遇到障碍--%@",((UIButton*)[self.view viewWithTag:_buttonTag/10*10+_buttonTag%10-1]).titleLabel.text );
                    }
                    
                }
            }
        }
    }
    //車
    if ([buttonTitle isEqualToString:@"車"]) {
        if (_buttonTag/10==sender.tag/10||_buttonTag%10==sender.tag%10) {
            //左右移动
            if (_buttonTag/10==sender.tag/10) {
                if (_buttonTag%10<sender.tag%10) {
                    for (NSInteger i=1; i<sender.tag%10-_buttonTag%10; i++) {
                        buttonTagNumber2++;
                        UIButton* button=(UIButton*)[self.view viewWithTag:buttonTagNumber2+buttonTagNumber1*10];
                        if (button.titleLabel.text.length!=0){
                            NSLog(@"遇到障碍--%ld%@",buttonTagNumber2+buttonTagNumber1*10,button.titleLabel.text);
                            return NO;
                        }
                    }
                }else{
                    for (NSInteger i=1; i<_buttonTag%10-sender.tag%10; i++) {
                        senderTagNumber2++;
                        UIButton* button=(UIButton*)[self.view viewWithTag:senderTagNumber2+senderTagNumber1*10];
                        if (button.titleLabel.text.length!=0){
                            NSLog(@"遇到障碍--%ld%@",senderTagNumber2+senderTagNumber1*10,button.titleLabel.text);
                            return NO;
                        }
                    }
                }
                //上下移动
            }else{
                if (_buttonTag/10<sender.tag/10) {
                    for (NSInteger i=1; i<sender.tag/10-_buttonTag/10; i++) {
                        buttonTagNumber1++;
                        UIButton* button=(UIButton*)[self.view viewWithTag:buttonTagNumber2+buttonTagNumber1*10];
                        if (button.titleLabel.text.length!=0){
                            NSLog(@"遇到障碍--%ld%@",buttonTagNumber2+buttonTagNumber1*10,button.titleLabel.text);
                            return NO;
                        }
                    }
                }else{
                    for (NSInteger i=1; i<_buttonTag/10-sender.tag/10; i++) {
                        senderTagNumber1++;
                        UIButton* button=(UIButton*)[self.view viewWithTag:senderTagNumber2+senderTagNumber1*10];
                        if (button.titleLabel.text.length!=0){
                            NSLog(@"遇到障碍--%ld%@",senderTagNumber2+senderTagNumber1*10,button.titleLabel.text);
                            return NO;
                        }
                    }
                }
            }
            return YES;
        }
    }
    //炮
    if ([buttonTitle isEqualToString:@"炮"]) {
        NSInteger number=0;
        if (_buttonTag/10==sender.tag/10||_buttonTag%10==sender.tag%10) {
            //左右移动
            if (_buttonTag/10==sender.tag/10) {
                if (_buttonTag%10<sender.tag%10) {
                    for (NSInteger i=0; i<sender.tag%10-_buttonTag%10; i++) {
                        buttonTagNumber2++;
                        UIButton* button=(UIButton*)[self.view viewWithTag:buttonTagNumber2+buttonTagNumber1*10];
                        if (button.titleLabel.text.length!=0){
                            NSLog(@"遇到障碍--%ld%@",buttonTagNumber2+buttonTagNumber1*10,button.titleLabel.text);
                            number++;
                        }
                        if ((number==2&&i==sender.tag%10-_buttonTag%10-1)||(number==0&&i==sender.tag%10-_buttonTag%10-1)) {
                            return YES;
                        }
                    }
                }else{
                    for (NSInteger i=0; i<_buttonTag%10-sender.tag%10; i++) {
                        buttonTagNumber2--;
                        UIButton* button=(UIButton*)[self.view viewWithTag:buttonTagNumber2+senderTagNumber1*10];
                        if (button.titleLabel.text.length!=0){
                            NSLog(@"遇到障碍--%ld%@",buttonTagNumber2+buttonTagNumber1*10,button.titleLabel.text);
                            number++;
                        }
                        if ((number==2&&i==_buttonTag%10-sender.tag%10-1)||(number==0&&i==_buttonTag%10-sender.tag%10-1)) {
                            return YES;
                        }
                    }
                }
            //上下移动
            }else{
                if (_buttonTag/10<sender.tag/10) {
                    for (NSInteger i=0; i<sender.tag/10-_buttonTag/10; i++) {
                        buttonTagNumber1++;
                        UIButton* button=(UIButton*)[self.view viewWithTag:buttonTagNumber2+buttonTagNumber1*10];
                        if (button.titleLabel.text.length!=0){
                            NSLog(@"遇到障碍--%ld%@",buttonTagNumber2+buttonTagNumber1*10,button.titleLabel.text);
                            number++;
                        }
                        if ((number==2&&i==sender.tag/10-_buttonTag/10-1)||(number==0&&i==sender.tag/10-_buttonTag/10-1)) {
                            return YES;
                        }
                    }
                }else{
                    for (NSInteger i=0; i<_buttonTag/10-sender.tag/10; i++) {
                        buttonTagNumber1--;
                        UIButton* button=(UIButton*)[self.view viewWithTag:senderTagNumber2+buttonTagNumber1*10];
                        if (button.titleLabel.text.length!=0){
                            NSLog(@"遇到障碍--%ld%@",buttonTagNumber2+buttonTagNumber1*10,button.titleLabel.text);
                            number++;
                        }
                        if ((number==2&&i==_buttonTag/10-sender.tag/10-1)||(number==0&&i==_buttonTag/10-sender.tag/10-1)) {
                            return YES;
                        }
                    }
                }
            }
        }
    }
    return NO;
}
-(void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}

@end

时间: 2025-01-08 15:58:07

中国象棋(IOS)的相关文章

[AHOI2009]中国象棋

题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个棋子.你也来和小可可一起锻炼一下思维吧! 输入输出格式 输入格式: 一行包含两个整数N,M,之间由一个空格隔开. 输出格式: 总共的方案数,由于该值可能很大,只需给出方案数模9999973的结果. 输入输出样例 输入样例#

团队-编程项目 中国象棋-需求分析

需求分析: 1.棋盘和棋子的绘制 2.按照象棋规则对棋子进行布局   3.鼠标响应 : 在对弈中,棋子是必须可以移动的,不然游戏无法进行.因此,鼠标左键点击是必不可少的一部分. 4.棋子的功能分析:  中国象棋中各色的象棋棋子的功能使象棋具有了真正的趣味性,中国象棋的棋子的类型大致分为:帅(将).士.象.马.车.炮.兵(卒)等几个类型.  帅(将):红方中的帅和黑方中的将的功能相同,都是只能在九宫格中进行横向和竖向的移动,每次移动一格,并且不能移动超出九宫格,帅和将不能见面.  士:士在整片棋盘

JavaScript中国象棋程序(0) - 前言

"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.希望通过这个系列,我们对博弈程序的算法有一定的了解.同时,我们也将构建出一个不错的中国象棋程序. JavaScript中国象棋程序系列共有9个部分: 0.JavaScript中国象棋程序(0)- 前言 1.JavaScript中国象棋程序(1)- 界面设计 2.JavaScript中国象棋程序(2)- 校验棋子走法 3.JavaScript中国象棋程序(3)- 电脑自动走棋 4.J

BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )

dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const in

中国象棋棋子及棋盘的绘制

一.题目简介 本课程设计主要是使用Swing这个Java自带的图形开发工具实现中国象棋棋子及棋盘的绘制,并根据相应的象棋规则,可以设计棋谱,完成棋谱的保存和对已保存的棋谱的演示,方便现在爱棋人士对残局的收藏于研究,而且达到了进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,熟练的应用面向对象的思想和设计方法解决实际问题的能力的目的. 1.当两方有一方将(帅)被吃掉后,程序不能自动结束或提示游戏结束,但想到该程序并不是要进行两方对弈,而是要设计棋谱所以在能力实现范围内

1.2中国象棋将帅问题

(根据中国象棋的基本原则)在只有双的将帅棋盘上,找出所有双方可以落子的位置(将帅不能碰面),但只能使用一个变量. 直觉上我们想到,只要遍历将帅所有可能的位置,去除将帅冲突的位置即可.可见,剩下的问题就在于如何使用一个变量来做二重循环的遍历.书中解法一给出的方法是将一个Byte变量拆成两个用,前一半代表"帅"可以走的位置,后一个变量代表"将"可以走的位置(事先已经将"将"和"帅"可以走的3*3的位置进行了编号),利用位操作即可获

Qt版本中国象棋开发(四)

内容:走法产生 中国象棋基础搜索AI, 极大值,极小值剪枝搜索, 静态估值函数 理论基础: (一)人机博弈走法产生: 先遍历某一方的所有棋子,再遍历整个棋盘,得到每个棋子的所有走棋情况(效率不高,可以改进) 1 void SingleGame::getAllPossibleMove(QVector<Step *> &steps) 2 { 3 int min, max; 4 if(this->_bRedTurn) 5 { 6 min = 0, max = 16; 7 } 8 els

Cocos2d-X开发中国象棋《六》游戏开始功能的实现

我在前面的博客Cocos2d-X开发中国象棋<四>设计游戏场景中介绍了在游戏场景上场景了一个开始按钮,并没有实现开始的功能 游戏开始功能的实现效果: 实现思路: 1.显示随机位置的棋子 2.将棋子移动到棋盘上的指定位置 具体实现方式: 首先在SceneGame类中定义一个initStone()函数用于初始化棋子 initStone()函数实现了3个功能 1.创建棋子 2.将棋子设置到随机位置 3.隐藏棋子 initStone()中的代码: //初始化32个棋子 void SceneGame::

团队-团队编程项目中国象棋-需求分析

需求分析: 1.棋盘和棋子的绘制 2.按照象棋规则对棋子进行布局   3.鼠标响应 : 在对弈中,棋子是必须可以移动的,不然游戏无法进行.因此,鼠标左键点击是必不可少的一部分. 4.棋子的功能分析:  中国象棋中各色的象棋棋子的功能使象棋具有了真正的趣味性,中国象棋的棋子的类型大致分为:帅(将).士.象.马.车.炮.兵(卒)等几个类型.  帅(将):红方中的帅和黑方中的将的功能相同,都是只能在九宫格中进行横向和竖向的移动,每次移动一格,并且不能移动超出九宫格,帅和将不能见面.  士:士在整片棋盘