1重大更新文档完善QTC++cardplayh开发文档.docx
- 文档编号:25795959
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:29
- 大小:104.03KB
1重大更新文档完善QTC++cardplayh开发文档.docx
《1重大更新文档完善QTC++cardplayh开发文档.docx》由会员分享,可在线阅读,更多相关《1重大更新文档完善QTC++cardplayh开发文档.docx(29页珍藏版)》请在冰豆网上搜索。
1重大更新文档完善QTC++cardplayh开发文档
如何编译:
1、把如下(5个文件代码)代码保存到同一个文件夹
2、搭配QT环境
3、打开终端进入代码目录
4、输入qmake-project回车
5、输入qmake****.pro回车(***.上一个命令生成的pro工程文件)
6、输入make
7、输入./***(make生成的pro工程同名文件)
就会看见如下图
代码共5个文件(widget.hwidget.cppcardplay.hcardclass.cppwidget.ui):
//name:
widget.cpp
//author:
_a_qian
//update:
2015/1/11
//edition:
0.11
//statement:
//1、个人所写公开的代码基于GNU
//2、本程序基于windowsvs2013编译通过,但是其他系统包括
//(微软的视窗系列、红帽系列、苹果系列系统通过QT环境的重新编译,即可在当前系统运行,如果产生任何细节变化,恕不进行通知,自行修改代码)
#include"widget.h"
#include"ui_widget.h"
#include
#include
QStringgetChinese(char*other){
returnQTextCodec:
:
codecForName("GBK")->toUnicode(other);
}
Widget:
:
Widget(QWidget*parent):
QWidget(parent),
ui(newUi:
:
Widget)
{
ui->setupUi(this);
this->a=newcard;
this->own=newcard(54,false);
this->classmate_A=newcard(54,false);
this->classmate_B=newcard(54,false);
this->table=newcard(54,false);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));
connect(ui->pushButton_5,SIGNAL(clicked()),this,SLOT(fenpai()));
connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(clamat_A()));
connect(ui->pushButton_3,SIGNAL(clicked()),this,SLOT(own_clicked()));
connect(ui->pushButton_4,SIGNAL(clicked()),this,SLOT(clamat_B()));
ui->pushButton_5->setText(getChinese("发牌"));
ui->label_4->setText(getChinese("扑克牌已经准备好,等待发牌"));
}
voidWidget:
:
clamat_A(){
chupai(ui->listWidget,classmate_A);
}
voidWidget:
:
own_clicked(){
chupai(ui->listWidget_2,own);
}
voidWidget:
:
clamat_B(){
chupai(ui->listWidget_3,classmate_B);
}
voidWidget:
:
clear_table(){
for(inttemp=0;ui->listWidget_4->item(temp)!
=0;temp++){
if(!
a->add_one(table->cut_one(temp))){
qDebug()<<"a回收牌错误";
}
}
a->compositor();
a->showcard();
}
voidWidget:
:
refenpai(){
a->refash();
classmate_A->refash();
classmate_B->refash();
own->refash();
table->refash();
this->fenpai();
this->refash();
}
voidWidget:
:
chupai(QListWidget*slect_what,card*slect_context){
clear_table();
for(inttemp=0;temp
if(slect_what->item(temp)!
=0&&slect_what->item(temp)->isSelected()){
if(!
table->add_one(slect_context->cut_one(temp))){
qDebug()< } } } refash(); } voidWidget: : refash(){ inttmpe=0; ui->listWidget->clear(); ui->listWidget_2->clear(); ui->listWidget_3->clear(); ui->listWidget_4->clear(); classmate_A->compositor(); classmate_B->compositor(); own->compositor(); table->compositor(); while(tmpe if(classmate_A->whatcard(tmpe)! =0){ ui->listWidget->insertItem(tmpe,getChinese(card_describe[classmate_A->whatcard(tmpe)-1])); } tmpe++; } tmpe=0; while(tmpe if(own->whatcard(tmpe)! =0){ ui->listWidget_2->insertItem(tmpe,getChinese(card_describe[own->whatcard(tmpe)-1])); } tmpe++; } tmpe=0; while(tmpe if(classmate_B->whatcard(tmpe)! =0){ ui->listWidget_3->insertItem(tmpe,getChinese(card_describe[classmate_B->whatcard(tmpe)-1])); } tmpe++; } tmpe=0; while(tmpe if(table->whatcard(tmpe)! =0){ ui->listWidget_4->insertItem(tmpe,getChinese(card_describe[table->whatcard(tmpe)-1])); } tmpe++; } } voidWidget: : fenpai(){ inttmpe=0; for(tmpe=0;tmpe if(! classmate_A->add_one(a->cut_one(tmpe))){ qDebug()< } } for(;tmpe<(this->a->Max_num()/3-1)*2;tmpe++){ if(! own->add_one(a->cut_one(tmpe))){ qDebug()< } } for(;tmpe if(! classmate_B->add_one(a->cut_one(tmpe))){ qDebug()< } } for(;tmpe if(! table->add_one(a->cut_one(tmpe))){ qDebug()< } } ui->label_4->setText(getChinese("扑克牌已经分发完毕,祝您玩的愉快")); ui->pushButton_5->setText(getChinese("重新发牌")); connect(ui->pushButton_5,SIGNAL(clicked()),this,SLOT(refenpai())); this->refash(); } Widget: : ~Widget() { deleteui; } intmain(intargc,char*argv[]) { QApplicationa(argc,argv); Widgetw; w.show(); returna.exec(); } _____________________________________分页线______________________________ //name: widget.h //author: _a_qian //update: 2015/1/11 //edition: 0.11 //statement: //应用优化 #ifndefWIDGET_H #defineWIDGET_H #include #include"cardplay.h" #include namespaceUi{ classWidget; } classWidget: publicQWidget { Q_OBJECT public: explicitWidget(QWidget*parent=0); voidchupai(QListWidget*,card*); voidclear_table(); ~Widget(); publicslots: voidrefash(); voidfenpai(); voidrefenpai(); voidclamat_A(); voidclamat_B(); voidown_clicked(); private: Ui: : Widget*ui; card*a,*own,*classmate_A,*classmate_B,*table; }; #endif//WIDGET_H ____________________________________分页线_________________________________ //name: cardplay.h //author: _a_qian //update: 2015/1/11 //edition: 2.5.9.2 //commentateforthisedition: //帮助注释完善 // #ifndefCARDPLAY_H_ #defineCARDPLAY_H_ staticcharcard_describe[54][10]={ "红桃_3","方板_3","黑桃_3","草花_3","红桃_4","方板_4", "黑桃_4","草花_4","红桃_5","方板_5","黑桃_5","草花_5", "红桃_6","方板_6","黑桃_6","草花_6","红桃_7","方板_7", "黑桃_7","草花_7","红桃_8","方板_8","黑桃_8","草花_8", "红桃_9","方板_9","黑桃_9","草花_9","红桃_10","方板_10", "黑桃_10","草花_10","红桃_J","方板_J","黑桃_J","草花_J", "红桃_Q","方板_Q","黑桃_Q","草花_Q","红桃_K","方板_K", "黑桃_K","草花_K","红桃_A","方板_A","黑桃_A","草花_A", "红桃_2","方板_2","黑桃_2","草花_2","小王","大王"}; classcard { public: card(int=54,bool=true);//参数一: 多少牌;参数二: 是否写入分配所有牌初始化为最大数值(例: card(12,true)或card(12),里面的牌序为0位置为int: 1,1位置为int: 2,~,11位置int: 12,card(<任意数字>,false)内容全部为空) ~card(); voidinitialize_zero();//清理所有值为0 booladd_one(int);//增加一个牌;参数一: 一个牌 intcut_one(int);//减去一个牌;参数一: 那个牌的位置,从0起;返回值: 那个牌 boolexchange(int,int);//交换牌;参数一: 前一个牌的位置,从0起;参数二: 后一个牌的位置,从0起 voidcompositor();//排序 voidMIX();//打乱 intmax()const;//返回最大牌位置 intmin()const;//返回最小牌位置 intwhatcard(intconst)const;//察看那个牌;参数一: 那个牌的位置(牌的编号从1起,往后按序初始化数字,例子: 牌1,牌2......,注意是从1起,所以有需要按数字引用card_describe变量的话-1进行寻址,如果超出card_describe变量长度的牌值请按求余(例: 变量a%45)的方法进行引用,以免错误) virtualvoidshowcard(int=-1);//显示所有有效牌,参数一: 那个牌位置 intMax_num()const{returnMax;}//返回此类所能接受的最大值 voidrefash();//重新发牌如果在最初构建时没有写入默认值,那重新刷新时,就不会写入默认值 protected: voidwritecard();//写默认值 //////////////////////////////////////////////////////////////////////// //正常paireturnexplore// //是! 00<=~ //是=00<=~ //否! 0=this->Max说明该牌已经存在不能重复添加// //否=0=this->Max没有空余位置// //////////////////////////////////////////////////////////////////////// intfindzero(int=0); private: int*cards; constintMax; constbooloverwrite; }; #endif _______________________________________分页线____________________________ //name: cardclass.cpp //author: _a_qian //update: 2015/1/11 //edition: 2.5.9.2 //statement: // #include #include #include usingnamespacestd; #include"cardplay.h" voidcard: : refash(){ if(this->overwrite){ this->initialize_zero(); this->writecard(); this->MIX(); }else { this->initialize_zero(); } } card: : card(intmany,booloverwrite1): Max(many),overwrite(overwrite1) { cards=newint[Max]; initialize_zero(); if(overwrite) { writecard(); MIX(); } } card: : ~card() { deletecards; cards=NULL; } voidcard: : initialize_zero() { for(inttemp=0;temp { *(cards+temp)=0; } } boolcard: : add_one(intpai) { intlocation=findzero(pai); if(location>=this->Max){returnfalse;} *(cards+location)=pai; returntrue; } intcard: : cut_one(intlocation) { inttemp=0; if(location>Max||location<0){returntemp;}//失败的时候并返回0值; temp=*(this->cards+location); *(cards+location)=0; returntemp; } boolcard: : exchange(intone,inttwo) { if(one<0||one>=Max||two<0||two>=Max){returnfalse;}//超出寻址范围 swap(*(cards+one),*(cards+two)); returntrue; } voidcard: : compositor() { intMaxx=0; for(inttemp=0;temp { Maxx=temp; for(intMa=temp+1;Ma { if(*(cards+Maxx)<*(cards+Ma)) { Maxx=Ma; } } exchange(temp,Maxx); } } voidcard: : MIX() { srand((unsigned)time(NULL)); for(inttemp=0;temp { exchange(temp,rand()%Max); } } intcard: : max()const { intMaxx=0; for(intMa=0;Ma { if((*(cards+Ma)! =0)&&(*(cards+Maxx)<*(cards+Ma))) { Maxx=Ma; } } returnMaxx; } intcard: : min()const { intMin=0; for(;Min for(intMa=0;Ma { if(*(cards+Ma)! =0&&(*(cards+Min)>*(cards+Ma))) { Min=Ma; } } returnMin; } intcard: : whatcard(constintlocation)const { if(location>=Max||location<0){return0;}//如果寻址超界返回值为0 return*(this->cards+location); } voidcard: : showcard(intone) { cout< inttemp=0; if(one>=0){temp=one;} for(;temp { if(*(cards+temp)! =0){cout< ";} if(*(cards+temp)==0){/*cout<<"这个是个0值: "< elseif((*(cards+temp)>54)||(*(cards+temp)<0)){cout<<"\n~! 1errer\n";} else{ cout<<*(card_describe+*(cards+temp)-1); cout< } if(one>=0){break;} } cout< } voidcard: : writecard() { for(inttemp=0;temp { *(cards+temp)=temp+1; } } intcard: : findzero(intpai) { intlocation=this->Max,temp=this->Max,locate=this->Max; for(inttem=0;tem { if(this->whatcard(tem)==0&&temp==this->Max) { temp=tem; } if(this->whatcard(tem)==pai&&pai! =0) { locate=tem; } } if(pai==0){location=temp;} elseif(pai! =0&&locate==this->Max){location=temp;} else{returnthis->Max;} returnlocation; } ___________________________________________分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 重大 更新 文档 完善 QTC cardplayh 开发