热门搜索:
页游|||||||||||
热门|||||||||||
新作||||||||||
即将||||||||||
系列|||||||||||
标签|||||||||||||||||||
当前位置:
&&太阳神三国杀v2.1.0国战版
太阳神三国杀v2.1.0国战版 中文版
三国杀单机版
不知道怎么下载,
微信扫一扫
游戏玩不了&扫我
《太阳神杀v2.1.0国战版中文版》是一款游戏。太阳神三国杀v2.1.0游戏中太阳神系列一直在跟着官服更新着,官服最新的元素在这个都能够体验到,而且一个人玩无聊了还可以实现联机作战。
修复夏侯涓连理杀崩溃
解禁TW华佗
修正兴衰AI
加入五道杠图片
解禁神杀特色卡牌
太阳神三国杀v2.1.0国战版至今停止更新,所以最终版本就是这个2.1.0,喜欢太阳神三国杀系列的玩家可以把此作当做收藏版了。
点击下载:(想怎么死就怎么死)
点击下载:(机甲大战)
同类合集推荐
国产单机游戏,简称国产单机,指中国人自己制作发行的单机游戏,区别于非中国人制作的单机游戏,它对于中国人来说不仅仅是游戏,也是一种文化上的认同。因为技术上的原因,很多的国产单机游戏不如非国产单机游戏不过其中也不乏一些精品国产游戏!今天小编就为
一共2523款
策略游戏是模拟游戏的衍生品,它比模拟游戏更刺激,更加考验玩家的智慧。游戏堡小编精心整理了一些好玩的策略游戏供大家下载,欢迎大家来游戏堡策略游戏专区瞧瞧。你的IQ能征服这些游戏吗?
三国题材在游戏中的运用已经多到数不过来了,中国的三国时期战乱纷纷,这也给众多游戏厂商提供了良好的游戏素材。所以三国题材一直是游戏界的宠儿,被重复利用至今。今天小编就来和大家分享一些好玩的三国题材单机游戏,小伙伴们一定要hold哦!
特别提示:强烈推荐用户使用迅雷 QQ旋风 或者 网盘下载,这样您的下载速度可以提高几倍。
手机扫一扫关注哦
1.游戏堡网所有的游戏都经过严格***测试,但下载后仍请大家自行查杀以便决定是否***使用。
2.推荐用户使用迅雷、QQ旋风或者网盘下载,以获取最佳的下载速度。
3.游戏在***运行的过程中若出现缺少dll、内存不能读、配置不正确等,请下载对应的
4.下载的资源有可能会被杀毒软件提醒,部分报毒与补丁工具修复有关。若您有顾虑,请谨慎下载。
游戏堡单机QQ群: 可以帮助您解决游戏相关的问题。
游戏玩不了?不知道怎么下载?微信扫一扫&
简体中文8.0
简体中文7.6
简体中文6.7
简体中文9.0
简体中文8.0
简体中文10.0
简体中文6.0
简体中文7.0
简体中文9.0
简体中文8.6
作品版权归作者所有,如果侵犯了您的版权,请联系我们,本站将在3个工作日内删除。
中国综合游戏门户之一,游戏堡网提供(,网络游戏,网页游戏,手机游戏等)资讯,攻略,下载,补丁 是您找游戏内容的最好选择。
All Rights Reserved 湘ICP备号-2 湘公网安备18 苏网文〔-015号
游戏堡网温馨提示:抵制不良游戏,拒绝盗版游戏,注意自我保护,谨防受骗上当,适度游戏益脑,沉迷游戏伤身,合理安排时间,享受健康生活!太阳神三国杀免费下载
资源大小:150.78 MB
月下载量:2,693次
软件属性:简体中文 免费软件
更新时间:
系统平台:Win7/WinVista/WinXP/Win8兼容软件
官方网站:
用户推荐:
用户评分:
同类软件推荐:
相关合集:相关热搜:
时下最热门的三国杀玩法已经让玩家们体验到了快乐,在《太阳神三国杀》中,玩家们可以进行单机游戏体验,独创更多新奇玩法带来更多乐趣。《三国杀太阳神版》顾名思义就是由太阳神制作的一款三国杀游戏。本游戏是真正的《三国杀单机版》,既可以局域。是一款基于C++ QT GUI框架的三国杀非官方开源软件,开发者:Moligaloo(太阳神上)。在实现游卡三国杀游戏规则的基础上,还拥有自己独特的功能和元素:原创技能卡牌配音;原创扩展包倚天、欢乐;原创扩展模式双将、剧情、闯关等。
时下最热门的三国杀玩法已经让玩家们体验到了快乐,在《太阳神三国杀》中,玩家们可以进行单机游戏体验,独创更多新奇玩法带来更多乐趣。《三国杀太阳神版》顾名思义就是由太阳神制作的一款三国杀游戏。本游戏是真正的《三国杀单机版》,既可以局域。是一款基于C++ QT GUI框架的三国杀非官方开源软件,开发者:Moligaloo(太阳神上)。在实现游卡三国杀游戏规则的基础上,还拥有自己独特的功能和元素:原创技能卡牌配音;原创扩展包倚天、欢乐;原创扩展模式双将、剧情、闯关等。&&&&
下载错误请点击举报
用户评分:
请打个分吧
请发表评论,字数不要少于10个哦~
小提示:您的评论对其他用户具有很重要的参考价值,请勿输入没有营养的点评内容,遇到问题请举报以方便我们及时处理。
12345678910
12345678910
12345678910vs2008编译QT开源项目--太阳神三国杀源码分析(一) 项目编译及整体分析 - CSDN博客
vs2008编译QT开源项目--太阳神三国杀源码分析(一) 项目编译及整体分析
按照上面的网址教程,下载三国杀源码,swig工具,并下载最新的QT4.8.2 for vs2008.我本机已经***好了vs2008和QT4.7,因此下载QT4.8.2后直接***,并在vs2008的QT菜单中点击QT Options子菜单,设置默认的QT/Win版本为4.8.2.使用vs2008打开QSanguosha.pro工程文件,转换为QSanguosha.sln.这时编译程序报无法找到fmodex.lib文件,这个文件是directx的声音文件库.搜索三国杀源码目录,可以找到,直接在项目属性中设置lib搜索路径,添加&./lib&即可成功编译.
后面逐步分析源码。
一、启动界面
& 从main函数中开始跟踪,找到如下代码
&&& MainWindow *main_window = new MainW
&&& Sanguosha-&setParent(main_window);
&&& main_window-&show();
& 在MainWindow类的构造函数中,创建连接对话框和配置对话框实例,并将其exec()/show()槽与Action的triggered信号关联,Action触发时显示对话框,并将对话框的信号与相应处理槽函数关联,一行代码搞定,代码简洁高效.
&&& connection_dialog = new ConnectionDialog(this);
&&& connect(ui-&actionStart_Game, SIGNAL(triggered()), connection_dialog, SLOT(exec()));
&&& connect(connection_dialog, SIGNAL(accepted()), this, SLOT(startConnection()));
&&& config_dialog = new ConfigDialog(this);
&&& connect(ui-&actionConfigure, SIGNAL(triggered()), config_dialog, SLOT(show()));
&&& connect(config_dialog, SIGNAL(bg_changed()), this, SLOT(changeBackground()));
&&& connect(ui-&actionAbout_Qt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
& 接着创建启动场景(start_scene),并创建启动画面中的10个启动按钮,将10个Action对象存入一个QList中,其中每个Action都对应创建一个按钮(Button类,继承与QGraphicsObject),并添加到启动场景(start_scene)中.
&&& StartScene *start_scene = new StartS
&&& QList&QAction*&
&&& actions && ui-&actionStart_Game
&&&&&&&&&&& && ui-&actionStart_Server
&&&&&&&&&&& && ui-&actionPC_Console_Start
&&&&&&&&&&& && ui-&actionReplay
&&&&&&&&&&& && ui-&actionConfigure
&&&&&&&&&&& && ui-&actionGeneral_Overview
&&&&&&&&&&& && ui-&actionCard_Overview
&&&&&&&&&&& && ui-&actionScenario_Overview
&&&&&&&&&&& && ui-&actionAbout
&&&&&&&&&&& && ui-&actionA
&&& foreach(QAction *action, actions)
&&&&&&& start_scene-&addButton(action);
& 创建一个QGraphicView对象,并显示在主窗体的中心位置,设置view的场景为启动场景.
&&& view = new FitView(scene);
&&& setCentralWidget(view);
&&& restoreFromConfig();
&//让view显示start_scene
&&& gotoScene(start_scene);
&二、Button类
& 启动界面的按钮效果很酷,鼠标滑过有动画效果,并且有声音,和大型网游效果很像.其实现很简单,Button类是从QGraphicObject继承的,在其内部处理鼠标事件和自绘.首先看Button的构造函数,里面直接调用了一个Init成员函数,Init函数中设置Button可接收焦点,可接收鼠标悬停事件,并根据构造函数的title参数创建一个QGraphicsPixmapItem对象,在其上drawText按钮的标题文字,在当前对象的位置之上显示这个图像,注意这个图像对象是在Button的构造函数中show出来的,因此其总会在Button实例的上方,但其不能接受焦点和鼠标事件,因此不影响Button对象对鼠标事件的处理.接着加载指定的按钮图像,并缩放为目标大小,存储在outimg成员中.
& setFlags(ItemIsFocusable);
&&& setAcceptHoverEvents(true);
&&& setAcceptedMouseButtons(Qt::LeftButton);
&&& title = new QPixmap(size.toSize());
&&& title-&fill(QColor(0,0,0,0));//填充完全透明的黑色,这样只能显示绘制的文字,其他部分不会覆盖底层图元
&&& QPainter pt(title);
&&& pt.setFont(font);
&&& pt.setPen(Config.TextEditColor);
&&& pt.setRenderHint(QPainter::TextAntialiasing);
&&& pt.drawText(boundingRect(), Qt::AlignCenter, label);
&&& title_item = new QGraphicsPixmapItem(this);
&&& title_item-&setPixmap(*title);
&&& title_item-&show();
&&& ......
& QImage bgimg(&image/system/button/button.png&);
&&& outimg = new QImage(size.toSize(),QImage::Format_ARGB32);
&&& qreal pad = 10;
&&& int w = bgimg.width();
&&& int h = bgimg.height();
&&& int tw = outimg-&width();
&&& int th& =outimg-&height();
&&& qreal xc = (w - 2*pad)/(tw - 2*pad);
&&& qreal yc = (h - 2*pad)/(th - 2*pad);
&&& for(int i=0;i&i++)
&&&&&&& for(int j=0;j&j++)
&&&&&&&&&&& int x =
&&&&&&&&&&& int y =
&&&&&&&&&&& if( x&=pad && x&=(tw - pad) ) x = pad + (x - pad)*
&&&&&&&&&&& else if(x&=(tw-pad))x = w - (tw - x);
&&&&&&&&&&& if( y&=pad && y&=(th - pad) ) y = pad + (y - pad)*
&&&&&&&&&&& else if(y&=(th-pad))y = h - (th - y);
&&&&&&&&&&& QRgb rgb = bgimg.pixel(x,y);
&&&&&&&&&&& outimg-&setPixel(i,j,rgb);
& Button类的paint虚方法重载实现很简单,直接绘制outimg图像,并根据动画效果需要在图像上方绘制一个白色半透明的矩形区域.
& QRectF rect = boundingRect();
&&& painter-&drawImage(rect,*outimg);
&&& painter-&fillRect(rect,QColor(255,255,255,glow*10));
为了实现动画效果,鼠标划入时触发的hoverEnterEvent事件中设置按钮拥有焦点,播放声音,并调用QObject::startTimer函数启动定时器,在timerEvent事件中调用update函数触发重绘,并增减glow变量,调整按钮上方绘制的矩形区域的透明度----当按钮拥有焦点时增加可见度,呈现淡白色朦胧效果,失去焦点则减少可见度,直到使按钮图片完全显示出来.
void Button::hoverEnterEvent(QGraphicsSceneHoverEvent *){
&&& setFocus(Qt::MouseFocusReason);
#ifdef AUDIO_SUPPORT
&&& if(!mute)
&&&&&&& Sanguosha-&playAudio(&button-hover&);
&&& if(!timer_id)timer_id = QObject::startTimer(40);
void Button::timerEvent(QTimerEvent *)
&&& update();
&&& if(hasFocus())
&&&&&&& if(glow&5)glow++;
&&&&&&& if(glow&0)glow--;
&&&&&&& else if(timer_id)
&&&&&&&&&&& QObject::killTimer(timer_id);
&&&&&&&&&&& timer_id = 0;
& 太阳神三国杀中声音很流畅亮丽.实现采用开源跨平台的游戏声音引擎fmod,详细内容请参见:.内部将fmod操作封装在Sound类中,这个类很简单,数行代码而已.
static FMOD_SYSTEM *S
static FMOD_SOUND *BGM;
static FMOD_CHANNEL *BGMC
class Sound{
&&& Sound(const QString &filename)
&&&&&&& :sound(NULL), channel(NULL)
&&&&&&& FMOD_System_CreateSound(System, filename.toAscii(), FMOD_DEFAULT, NULL, &sound);
&&& ~Sound(){
&&&&&&& if(sound)
&&&&&&&&&&& FMOD_Sound_Release(sound);
&&& void play(){
&&&&&&& if(sound){
&&&&&&&&&&& FMOD_RESULT result = FMOD_System_PlaySound(System, FMOD_CHANNEL_FREE, sound, false, &channel);
&&&&&&&&&&& if(result == FMOD_OK){
&&&&&&&&&&&&&&& FMOD_Channel_SetVolume(channel, 1.000/*Config.EffectVolume*/);
&&&&&&&&&&&&&&& FMOD_System_Update(System);
&&&&&&&&&&& }
&&& bool isPlaying() const{
&&&&&&& if(channel == NULL)
&&&&&&&&&&&
&&&&&&& FMOD_BOOL is_playing =
&&&&&&& FMOD_Channel_IsPlaying(channel, &is_playing);
&&&&&&& return is_
&&& FMOD_SOUND *
&&& FMOD_CHANNEL *
在项目启动时初始化fmod:
&&& FMOD_RESULT result = FMOD_System_Create(&System);
&&& if(result == FMOD_OK){
&&&&&&& FMOD_System_Init(System, 100, 0, NULL);
在项目结束时释放fmod:
&&& if(System){
&&&&&&& SoundCache.clear();
&&&&&&& FMOD_System_Release(System);
&&&&&&& System = NULL;
注意,fmod需要6个头文件:fmod.h,fmod_codec.h,fmod_dsp.h,fmod_errors.h,fmod_memoryinfo.h,fmod_output.h,以及一个lib文件fmodex.lib,一个dll文件fmodex.dll.可以直接将上面的类和8个文件移植到自己的项目中使用,测试通过.唯一需要注意的是Sound对象的析构函数中会结束音频播放,因此如果声明了一个临时变量,需要等待声音播放完毕才能跳出Sound对象的作用域,否则声音未等播放已经结束了.
& 四、如何进入到RoomScene
& 进入游戏后需要首先点击Start Server按钮建立服务端,再点击Start game菜单,重新启动一个进程,在新进程中点击Start game按钮,弹出连接窗体,输入服务器IP地址及用户名后可以加入到游戏中,直接进入正式游戏界面.这里创建了两个进程,第一个是服务端,第二个是客户端.为了跟踪第二个exe进程,需要首先直接启动一个exe进程,在启动第二个进程后,点击vs2008的调试菜单--附加到进程,找到第二个三国杀进程,即可在源码中设置断点跟踪了.这里描述一下客户端建立游戏的过程.
& 点击Start game按钮后,弹出一个连接窗体,窗口对象的accepted信号与startConnection槽相关联,点击连接按钮后,触发这个函数,创建Client类的实例,在其version_checked信号的响应函数checkVersion中,判断客户端与服务端的版本号是否匹配,如果匹配则与服务端建立连接,客户端对象的server_connected信号触发enterRoom函数,进入到游戏界面.
connect(connection_dialog, SIGNAL(accepted()), this, SLOT(startConnection()));& //构造函数中连接窗体返回触发startConnection
//startConnection函数启动Client对象,并设置信号与槽的连接
void MainWindow::startConnection(){
&&& Client *client = new Client(this);
&&& connect(client, SIGNAL(version_checked(QString,QString)), SLOT(checkVersion(QString,QString)));
&&& connect(client, SIGNAL(error_message(QString)), SLOT(networkError(QString)));
//checkVersion中比较版本号,并进入到游戏界面
void MainWindow::checkVersion(const QString &server_version, const QString &server_mod){
&&& QString client_mod = Sanguosha-&getMODName();
&&& if(client_mod != server_mod){
&&&&&&& QMessageBox::warning(this, tr(&Warning&), tr(&Client MOD name is not same as the server!&));
&&& Client *client = qobject_cast&Client *&(sender());
&&& QString client_version = Sanguosha-&getVersionNumber();
&&& if(server_version == client_version){
&&&&&&& client-&signup();
&&&&&&& connect(client, SIGNAL(server_connected()), SLOT(enterRoom()));
&&&&&&& if(qApp-&arguments().contains(&-hall&)){
&&&&&&&&&&& HallDialog *dialog = HallDialog::GetInstance(this);
&&&&&&&&&&& connect(client, SIGNAL(server_connected()), dialog, SLOT(accept()));
& 再看一下核心函数enterRoom.设置好服务端IP地址并登陆成功后,触发这个函数.首先将这个IP地址保存在Config中.设置相关Action的Enabled属性使相应按钮和菜单失效变灰.创建RoomScene对象,进行相关设置.最后调用gotoScene(room_scene);切换到游戏界面.
& 五、游戏界面的创建
& 游戏界面的元素完全创建在RoomScene场景类中,只要打开游戏查看效果并对照代码和image\system目录中的图片,即可分析出对应界面是如何创建出来的.下面逐一解读.首先根据从游戏服务端获取的玩家总数,生成代表每个异地玩家的图标.
&&& //创建代表其他玩家的头像,不用创建当前玩家
&&& for(i = 0; i & player_count - 1;i++){
&&&&&&& Photo *photo = new P
&&&&&&& photos &&
&&&&&&& addItem(photo);
&&&&&&& photo-&setZValue(-0.5);
& 接着创建操作面板,这个操作面板包括界面上的按钮区域,还有当前玩家的装备区和手牌区域.
&//添加右下方的操作面板及按钮
&&&&&&& createControlButtons();
&&&&&&& QGraphicsItem *button_widget = NULL;
&&&&&&& if(ClientInstance-&getReplayer() == NULL){
&&&&&&&&&&& QString path = &image/system/button/irregular/background.png&;
&&&&&&&&&&& button_widget = new QGraphicsPixmapItem(QPixmap(path));
&&&//四个不规则按钮
&&&&&&&&&&& ok_button-&setParentItem(button_widget);
&&&&&&&&&&& cancel_button-&setParentItem(button_widget);
&&&&&&&&&&& discard_button-&setParentItem(button_widget);
&&&&&&&&&&& trust_button-&setParentItem(button_widget);
&&&&&&& // create dashboard 仪表盘 包括玩家装备和手牌区域
&&&&&&& dashboard = new Dashboard(button_widget);
&&&&&&& dashboard-&setObjectName(&dashboard&);
&&&&&&& //dashboard-&setZValue(0.8);
&&&&&&& addItem(dashboard);
& 调用createStateItem();函数创建选择反贼和英雄的两个按钮.
& 创建聊天区域控件:
&&&&&&& chat_box = new QTextE
&&&&&&& QSize chat_box_size = room_layout-&chat_box_
&&&&&&& chat_box_size.rwidth() += widen_
&&&&&&& chat_box-&resize(chat_box_size);
&&&&&&& chat_box-&setObjectName(&chat_box&);
&&&&&&& chat_box_widget = addWidget(chat_box);
& 输入聊天信息的textEdit控件:
&&&&&&& chat_edit = new QLineE
&&&&&&& chat_edit-&setFixedWidth(chat_box-&width());
&&&&&&& chat_edit-&setObjectName(&chat_edit&);
& 右边的系统信息显示框:
&&&&&&& chat_widget = new ChatWidget();
&&&&&&& chat_widget-&setX(chat_box_widget-&x()+chat_edit-&width() - 77);
&&&&&&& chat_widget-&setY(chat_box_widget-&y()+chat_box-&height() + 9);
&&&&&&& chat_widget-&setZValue(-0.2);
&&&&&&& addItem(chat_widget);
& 最底部的两个ComboBox:
&&&&&&& sort_combobox = new QComboB
&&&&&&& sort_combobox-&addItem(tr(&No sort&));
&&&&&&& sort_combobox-&addItem(tr(&Sort by color&));
&&&&&&& sort_combobox-&addItem(tr(&Sort by suit&));
&&&&&&& sort_combobox-&addItem(tr(&Sort by type&));
&&&&&&& sort_combobox-&addItem(tr(&Sort by availability&));
&&&&&&& connect(sort_combobox, SIGNAL(currentIndexChanged(int)), dashboard, SLOT(sortCards(int)));
&&& connect(Self, SIGNAL(pile_changed(QString)), this, SLOT(updatePileButton(QString)));
&&& // add role combobox
&&& role_combobox = new QComboB
&&& role_combobox-&addItem(tr(&Your role&));
&&& role_combobox-&addItem(tr(&Unknown&));
&&& connect(Self, SIGNAL(role_changed(QString)), this, SLOT(updateRoleComboBox(QString)));
& 进入游戏界面的生成基本上介绍完毕,下面将分多个文章分别介绍各个类的作用和实现机制.
本文已收录于以下专栏:
相关文章推荐
J***A源码网盘下载:/s/1c0fG2dE
三国杀作为一款原创桌上游戏,有别于其他桌面游戏的最主要特色,就是身份系统。三国杀***有4种...
HOW TO BUILD
Tips: &~& stands for the folder where the repo is in.
VS2013(Windows)
//sanguosha
struct pai
//sanguosha
struct pai
1. Qt学习之路_13(简易俄罗斯方块)
/tornadomeet/archive//2698337.html
请参看 /f?kz=
按照上面的网址教程,下载三国杀源码,swig工具,并下载最新的QT4.8.2 for vs2008.我本机已...
太阳神三国杀学习初步--qt5.7.0+vs2015编译运行
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)