⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keychessman.cpp

📁 EVC 环境下的五子棋, 用模块器5.0可以跑一下!
💻 CPP
字号:
#include "StdAfx.h"
/**
 *
 * 文件名: KeyChessman.cpp
 * 描述:   关键棋子类函数实现
 *          关键棋子类,用于记录下一手行棋时的关键棋子。
 *          关键棋子按值从大到小的顺序排列。
 * 作者:   魏罡
 * 时间:   2005.9.10 - 2005.10.6
 *
 * file name:   KeyChessman.cpp
 * description: 
 * author:      WEI-Gang
 * time:        2005.9.10 - 2005.10.7
 *
 */

#include "KeyChessman.h"
#include <stdlib.h>
#include <time.h>

/////////////////////////////////////////////////

CKeyChessman::CKeyChessman(){
	for(int i = 0;i < 6;i++){
		head[i/3][i%3] = NULL;
		keynum[i/3][i%3] = 0;
	}
}

CKeyChessman::~CKeyChessman(){
	for(int i = 0;i < 6;i++){
		keychessman * h = head[i/3][i%3];
		while(h){
			head[i/3][i%3] = h->next;
			delete h;
			h = head[i/3][i%3];
		}
	}
}

////////////////////////////////////////////////

int CKeyChessman::Add(int x,int y,int value,char col){
	//向类添加一个关键棋子。成功返回1,失败返回0。
	int num = value%10;
	if(num > 2){
		return 0;
	}
	int c = (col=='B'?1:0);

	keychessman * add = NULL;
	add = new keychessman;
	if(add == NULL){
		return 0;//分配内失败,添加失败。
	}
	add->x = x;
	add->y = y;
	add->col = col;

	add->next = head[c][num];
	head[c][num] = add;
	keynum[c][num]++;
	return 1;
}

int CKeyChessman::NotEmpty(){
	//判断关键棋子是否非空,空返回0,非空返1。
	for(int i = 0;i < 6;i++){
		if(head[i/3][i%3] != NULL){
			return 1;
		}
	}
	return 0;
}

void CKeyChessman::GetChessman(int &x,int &y,char &col,char fc){
	//获取当前棋子的坐标(x,y)及颜色,fc为优先考虑颜色
	int c = (fc=='B'?1:0);
	srand(WCE_FCTN(time) (NULL));
	int count;
	keychessman *p,*f;
	for(int i = 0;i < 3;i++){
		if(keynum[c][i] > 0){
			count = keynum[c][i]==1?0:rand()%keynum[c][i];
			p = head[c][i];
			f = NULL;
			while(count > 0){
				f = p;
				p = p->next;
				count --;
			}
			x = p->x;
			y = p->y;
			col = p->col;
			if(f == NULL){
				head[c][i] = p->next;
			}
			else{
				f->next = p->next;
			}
			keynum[c][i]--;
			delete p;
			return;
		}
		if(keynum[1-c][i] > 0){
			count = keynum[1-c][i]==1?0:rand()%keynum[1-c][i];
			p = head[1-c][i];
			f = NULL;
			while(count > 0){
				f = p;
				p = p->next;
				count --;
			}
			x = p->x;
			y = p->y;
			col = p->col;
			if(f == NULL){
				head[1-c][i] = p->next;
			}
			else{
				f->next = p->next;
			}
			keynum[1-c][i]--;
			delete p;
			return;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -